22

我有一个将从 jquery ajax 调用的 webmethod:

[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 只能在 Render 期间调用。

我已经为当前的 aspx 包含了 EnableEventValidation="false",也禁用了视图状态。但我仍然得到同样的错误。对此有什么想法吗?

4

3 回答 3

59

解决方案是将页面的事件验证禁用为

<%@ 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

于 2013-06-12T05:44:11.023 回答
12

根据布赖恩的第二个链接,无需进一步跳跃,只需执行以下操作:

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); 
于 2013-04-04T06:16:56.583 回答
0

EnableEventValidation您需要通过将标志设置为 来通知 ASP.Net 不要验证事件false

您可以通过以下方式在 Web.Config 中进行设置

<%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation = "false"
于 2022-02-14T06:30:23.917 回答