代码之家  ›  专栏  ›  技术社区  ›  Chris Cudmore

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

  •  7
  • Chris Cudmore  · 技术社区  · 15 年前

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

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

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

    3 回复  |  直到 8 年前
        1
  •  6
  •   Andrew Hare    15 年前

    你有什么理由吗 必须 是否将这些用户控件转换为服务器控件?记住有可能 compile a user control into an assembly .

        2
  •  1
  •   Jeremy    15 年前

    你是对的,这里没有魔法子弹,但是既然你已经有了一个用户控制,那就不难了。

    1. 确保在代码隐藏中设置了所有属性、事件等,因为完成后不会有任何标记。
    2. 创建新的服务器控件
    3. 将所有事件处理和属性设置代码粘贴到新控件中
    4. 重写每个子控件的呈现方法调用传入提供的htmltextWriter的renderControl方法

      protected override void Render(HtmlTextWriter writer)
      {
          TextBox box = new TextBox();
          //Set all the properties here
          box.RenderControl(writer);
          base.Render(writer);
      }
      
        3
  •  0
  •   djmj    8 年前

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

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

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

    我使用了一个网站项目(不是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文件。