尝试从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,...)
答案 0 :(得分:2)
我找到了解决方案:
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;