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 はレンダリング中にのみ呼び出すことができる」というエラーが表示されます。

現在の aspx には既に EnableEventValidation="false" が含まれており、viewstate も無効になっています。しかし、それでも同じエラーが発生します。これに関するアイデアはありますか?

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-call-duri

于 2013-06-12T05:44:11.023 に答える
12

ブライアンの 2 番目のリンクに従って、さらにホップすることなく、次のようにします。

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 に答える