【问题标题】:Overriding VerifyRenderingInServerForm on dynamically created Pages()在动态创建的 Pages() 上覆盖 VerifyRenderingInServerForm
【发布时间】:2013-02-04 03:03:35
【问题描述】:

我在动态创建页面时遇到了一些问题:

p = New Page();
Page myPage = new Page();
FormAtt ctrl = (FormAtt)myPage.LoadControl("path/to/my/file.ascx");  // here lies the gridview of evil
myPage.Controls.Add(ctrl);

问题是我收到了

Control ... must be placed inside a form tag with runat=server

好的,所以我发现我需要重写 VerifyRenderingInServerForm 方法才能调用无格式页面,但是我如何重写 VerifyRenderingInServerForm,因为我没有 ASPX 文件。


ps:我有一个相关的问题,但我不知道该怎么做,因为它们是不同的问题,但解决方案是相同的问题,我放弃了最后一个解决方案 - 请参阅:Form is Null in Dynamically created Pages

【问题讨论】:

  • 您可以尝试创建一个已覆盖 VerifyRenderingInServerForm 的自定义 Page。然后代替p = New Page(); 这个p = New MyCustomPage();

标签: c# asp.net gridview webforms


【解决方案1】:

我这样做是为了渲染一个组件

    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

    Page p = new Page();
    System.Web.UI.HtmlControls.HtmlForm form = new System.Web.UI.HtmlControls.HtmlForm();
    p.Controls.Add(form);
    form.Controls.Add(gv);
    form.RenderControl(htmlWrite);
    string j = stringWrite.ToString();

【讨论】:

    【解决方案2】:

    与您之前的问题类似。您需要先添加 HtmlForm。 ASP.Net 需要一个表单标签才能向页面添加控件。

    Page myPage = new Page();
    HtmlForm form = new HtmlForm();
    FormAtt ctrl = (FormAtt)myPage.LoadControl("path/to/my/file.ascx");
    form.Controls.Add(ctrl);
    myPage.Controls.Add(form);
    

    【讨论】:

    • 这也有效,但生成的 HTML 包含一个不需要的表单
    【解决方案3】:

    您可以尝试使用已经覆盖 VerifyRenderingInServerForm 的自定义类:

     public partial class MyCustomPage : System.Web.UI.Page
     {
        public override void VerifyRenderingInServerForm(Control control)
        {         
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
            var p = new MyCustomPage();
            FormAtt uc = (FormAtt)p.LoadControl("path/to/my/file.ascx");
            p.Controls.Add(uc);
        }
    }
    

    【讨论】:

    • 我认为这是最好的方法,我试图避免创建新类,因为它只会在我的方法中使用。
    • 嗨,我需要类似的东西,但用于渲染控制。我怎样才能在课堂上而不是在页面中做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2014-03-21
    相关资源
    最近更新 更多