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

Posted

技术标签:

【中文标题】将用户控件转换为服务器控件【英文标题】:Convert User Controls to Server Controls 【发布时间】:2010-10-30 10:41:35 【问题描述】:

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

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

在 MS 提出神奇的“转换为服务器控制”选项之前,我似乎一直无法从头开始重写。有什么想法吗?

【问题讨论】:

使用用户控件会有什么问题?如果您需要共享逻辑,您可以让 .ascx 文件继承自您在类库中定义的基类,以便可以轻松地重用逻辑;同时保持可轻松更改的灵活视觉设计。 我搜索了几个小时并尝试了很多。唯一对我有用的是这篇文章blogs.msdn.microsoft.com/davidebb/2005/10/31/…。它说self-contained 有给定的限制。我使用了WebSite 项目,并且不得不将后面的代码内联到 ascx 文件中。所以基本上我只剩下一个文件供用户控制。 【参考方案1】:

您是否有理由必须将这些用户控件转换为服务器控件?请记住,可以compile a user control into an assembly。

【讨论】:

网页存档(因离线网站):web.archive.org/web/20120328081058/http://www.nathanblevins.com/…【参考方案2】:

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

    确保所有属性、事件等都在后面的代码中设置,因为完成后不会有任何标记 创建新的服务器控件 将所有事件处理和属性设置代码粘贴到新控件中

    覆盖每个子控件的 Render 方法,调用传入提供的 htmlTextWriter 的 RenderControl 方法

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

【讨论】:

【参考方案3】:

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

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

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

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

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

所以基本上我只剩下一个文件供用户控制。当代码隐藏是一个单独的文件时,当我引用最终的 dll 时,所有控件的位置都为 null。

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

【讨论】:

以上是关于将用户控件转换为服务器控件的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有数据的用户控件转换并保存到图像中?

将画布大小调整为窗口/用户控件大小

用户控制控件为空

wpf下拉多选自定义控件添加change事件

C ++如何将用户控件添加到表单中以便我可以在面板之间进行转换

WPF 中的image控件的Source如何赋值?