【问题标题】:Render ascx control from outside page context从外部页面上下文渲染 ascx 控件
【发布时间】:2014-03-20 12:29:02
【问题描述】:

当尝试从 WebService 呈现 ascx UserControl 的 HTML 时,我收到错误 RegisterForEventValidation can only be called during Render

这是this question 的副本。但是给出的答案不起作用...

解决方案始终涉及EnableEventValidation="false"override VerifyRenderingInServerForm,但这些仅适用于Page,不适用于Control(ascx 是什么)。

将 ascx 更改为 aspx 时,以下代码失败:page.LoadControl("mycontrol.ascx/aspx") 并且根据 this question 渲染 aspx 显然不是那么容易。

问题
我怎样才能毫无例外地渲染我的 ascx?

额外问题:
为什么EnableEventValidation 在控件上不可用,而网上有很多例子声称不是这样? (StackOverflow, CodeProject, ...)

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    我找到了解决办法:

    var page = new System.Web.UI.Page();
    
    // Or RenderControl throws 'RegisterForEventValidation can only be called during Render'
    page.EnableEventValidation = false; 
    
    // Or generates a second hidden field with ID=_VIEWSTATE
    page.EnableViewState = false; 
    var sb = new StringBuilder();
    
    var ctl = (SomeAscx)page.LoadControl("SomeAscx.ascx");
    using (var sw = new StringWriter(sb))
    using (var htw = new HtmlTextWriter(sw))
    {
         ctl.RenderControl(htw);
    }
    
    string result = sb.ToString();
    

    设置键:

    page.EnableEventValidation = false; 
    page.EnableViewState = false; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2013-12-28
      相关资源
      最近更新 更多