[英]RegisterForEventValidation can only be called during render() and Unable to evaluate expression because the code is optimized
[英]RegisterForEventValidation can only be called during Render
我有一个网络方法,将从 jquery ajax 调用:
[WebMethod]
public string TestMethod(string param1, string param2)
{
StringBuilder b = new StringBuilder();
HtmlTextWriter h = new HtmlTextWriter(new StringWriter(b));
this.LoadControl("~/Pages/Controls/Listing.ascx").RenderControl(h);
string controlAsString = b.ToString();
return controlAsString;
}
(这是一个非静态方法,我们能够命中它。这不是问题)
当执行 loadControl() 方法时,我收到一条错误消息:RegisterForEventValidation can only be called during Render。
我已经为当前的 aspx 添加了 EnableEventValidation="false",还禁用了视图状态。 但我仍然得到同样的错误。 对此有什么想法吗?
解决方案是禁用Page的事件验证
<%@ Page ............ EnableEventValidation="false" %>
并通过在C#代码后面添加以下方法来覆盖VerifyRenderingInServerForm
public override void VerifyRenderingInServerForm(Control control)
{
/* Confirms that an HtmlForm control is rendered for the specified ASP.NET
server control at run time. */
}
请参阅下面的链接
http://www.codeproject.com/Questions/45450/RegisterForEventValidation-can-only-be-called-duri
根据Brian的第二个链接,没有进一步跳跃,只需这样做:
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
Html32TextWriter hw = new Html32TextWriter(sw);
Page page = new Page();
HtmlForm f = new HtmlForm();
page.Controls.Add(f);
f.Controls.Add(ctrl);
// ctrl.RenderControl(hw);
// above line will raise "RegisterForEventValidation can only be called during Render();"
HttpContext.Current.Server.Execute(page, sw, true);
Response.Write(sb);
您需要通过将EnableEventValidation
标志设置为false
来通知 ASP.Net 不要验证该事件。
您可以通过以下方式在 Web.Config 中进行设置
<%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation = "false"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.