【问题标题】:Load ascx component using C# code使用 C# 代码加载 ascx 组件
【发布时间】:2010-10-24 21:05:29
【问题描述】:

有什么方法可以让我使用 C# 加载然后“渲染”一个 ascx 控件?

本质上,我正在尝试用 C# 函数替换内联 ASP,该函数将返回相同的 HTML。然后,这将让我将其设置为 webmethod,以便我可以使用生成原始 html 的相同代码使用 jQuery 更新页面的该部分。

我真的需要一些方法来做到这一点,这似乎是一条合乎逻辑的路线。

【问题讨论】:

    标签: c# asp.net ascx


    【解决方案1】:

    您需要创建一个在其中呈现控件的页面:

    public static string RenderUserControl(string path)
    {
        Page pageHolder = new Page();
        Control viewControl = pageHolder.LoadControl(path);
    
        pageHolder.Controls.Add(viewControl);
        using(StringWriter output = new StringWriter())
        {
            HttpContext.Current.Server.Execute(pageHolder, output, false);
            return output.ToString();
        }
    }
    

    用户控件本身不会呈现。 (This article 有一些相关信息,我借用了一些代码)。

    【讨论】:

      【解决方案2】:

      Keltex 的答案是唯一对我有用的,因为我正在使用嵌套的用户控件。此外,如果您想将参数传递给您的用户控件,您可以这样做:

      _MyNameSpace_MyUserControl viewcontrol = (_MyNameSpace_MyUserControl) pageHolder.LoadControl(path);
      
      viewcontrol.MyParam = "My value";
      

      【讨论】:

        【解决方案3】:

        这个Explanation 应该有您正在寻找的答案。基本上你必须在页面中声明控件,然后在代码隐藏中声明 LoadControl。

        【讨论】:

          【解决方案4】:

          我没有尝试过,但是你可以使用 LoadControl 函数加载控件:

          Control Example = LoadControl("~\\Controls\\MyControl.ascx");
          

          然后你可以尝试渲染控件:

          StringWriter sw = new StringWriter();
          HtmlTextWriter htw = new HtmlTextWriter(sw);
          Example.RenderControl(htw);
          Response.Write(sw.ToString());
          Response.End();
          

          但请确保在页面上覆盖 VerifyRenderingInServerForm 并将 EnableEventValidation 切换为 false。

          忘记我上面写的。我回去测试了,你不能调用 LoadControl,因为 webmethod 是静态的。由于它是静态的,因此您没有要调用的 Page 对象...这意味着不会动态加载用户控件。

          【讨论】:

          • 你实际上是对的。 MyUsercontrol uc = (MyUserControl)Page.LoadControl("/path/to/MyUserControl.ascx");然后你可以做 SomeItem.Controls.Add(uc);或者按照您的演示将控件呈现为字符串,然后使用 jQuery 以编程方式添加 dom 项,都可以。
          • 实际上我不认为在这种情况下添加控件是一种选择。没有完整的回发(没有页面对象或任何要添加控件的对象),从 jQuery 调用等。但是 Keltex 的方法有效。
          【解决方案5】:

          使用起来非常简单:

          yourItem.Controls.Add(LoadControl("~/user control File path"));
          

          【讨论】:

            猜你喜欢
            • 2012-04-30
            • 2011-01-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-03
            相关资源
            最近更新 更多