将用户控件转换为服务器控件

7

我想知道有没有人将用户控件转换为Web控件的经验?

理想情况下,我希望将一些设计工作交给其他人,他们会为我提供精美布局的用户控件。然后,我可以进行转换、编译、测试和部署的过程。

在微软推出神奇的“转换为服务器控件”的选项之前,看起来我只能从头开始重新编写。有什么建议吗?


使用用户控件有什么问题吗?如果您需要共享逻辑,可以让.ascx文件继承您在类库中定义的基类,以便可以轻松重用逻辑;同时保持灵活的视觉设计,可以轻松更改。 - driis
我搜索了数小时并尝试了很多方法,唯一有效的是这篇文章 https://blogs.msdn.microsoft.com/davidebb/2005/10/31/turning-an-ascx-user-control-into-a-redistributable-custom-control/。它提到了“自包含”(self-contained)的限制条件。我使用了一个“WebSite”项目,并不得不将代码内嵌到ascx文件中。所以基本上我只剩下一个单独的文件作为用户控件。 - djmj
3个回答

6

您一定要将这些用户控件转换为服务器控件吗?请记住,可以将用户控件编译为程序集


1
Web存档(由于网站离线):http://web.archive.org/web/20120328081058/http://www.nathanblevins.com/2008/06/compile-a-web-user-control-into-a-dll-net-c/ - Caramiriel

1

你说得对,这里没有什么魔法子弹,但既然你已经有了一个用户控件,那就不是很难。

  1. 确保所有属性、事件等都在代码后端设置,因为完成后你将没有任何标记
  2. 创建一个新的服务器控件
  3. 将所有事件处理和属性设置代码粘贴到新控件中
  4. 覆盖每个子控件的Render方法,调用RenderControl方法并传入提供的HtmlTextWriter

    protected override void Render(HtmlTextWriter writer)
    {
        TextBox box = new TextBox();
        //在此处设置所有属性
        box.RenderControl(writer);
        base.Render(writer);
    }
    

0

我花了几个小时搜索并找到了许多相关博客。

唯一对我有用的是这篇文章https://blogs.msdn.microsoft.com/davidebb/2005/10/31/turning-an-ascx-user-control-into-a-redistributable-custom-control/

它说可以使用给定限制的自包含,但没有提到代码必须包含在ascx文件中。

我使用的是Web Site项目(而不是Web应用程序!),必须将代码嵌入到ascx文件中,并且只能使用控件指令:

<%@ Control Language="C#" ClassName="MyPackage.MyControl"%>

基本上,我只剩下一个用户控件的单个文件。当codebehind是一个单独的文件时,当我引用最终的dll时,所有控件都为空。

我还尝试了http://blog.janjonas.net/2012-04-06/asp_net-howto-user-control-library-compile-dll-file但是使用反射时无法找到ascx文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接