将用户控件转换为服务器控件
我想知道是否有人有将用户控件转换为Web控件的经验?
理想情况下,我想将一些设计工作卸载给其他人,他们会给我很好的布局用户控件。 然后,我可以完成转换,编译,测试和部署的过程。
直到MS提出神奇的“转换为服务器控制”选项,看起来我很难从头开始重写。 有任何想法吗?
您是否有必要将这些用户控件转换为服务器控件? 请记住,可以将用户控件编译到程序集中 。
你是对的,这里没有灵丹妙药,但既然你已经有了用户控制,那就不那么难了。
- 确保在后面的代码中设置了所有属性,事件等,因为完成后您将没有任何标记
- 创建一个新的服务器控件
- 将所有事件处理和属性设置代码粘贴到新控件中
-
覆盖每个子控件的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文件。