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

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

理想情况下,我想将一些设计工作卸载给其他人,他们会给我很好的布局用户控件。 然后,我可以完成转换,编译,测试和部署的过程。

直到MS提出神奇的“转换为服务器控制”选项,看起来我很难从头开始重写。 有任何想法吗?

您是否有必要将这些用户控件转换为服务器控件? 请记住,可以将用户控件编译到程序集中 。

你是对的,这里没有灵丹妙药,但既然你已经有了用户控制,那就不那么难了。

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

     protected override void Render(HtmlTextWriter writer) { TextBox box = new TextBox(); //Set all the properties here box.RenderControl(writer); base.Render(writer); } 

我搜索了几个小时,发现了很多关于它的博客。

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

它说具有给定限制的自包含 ,但它没有提到代码隐藏必须包含在ascx文件中。

我使用了一个Web站点项目(不是Web应用程序!),并且必须将后面的代码内联到ascx文件中,并且只使用控制指令,如:

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

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

我也尝试了http://blog.janjonas.net/2012-04-06/asp_net-howto-user-control-library-compile-dll-file,但是通过reflection无法找到ascx文件。