簡體   English   中英

RegisterForEventValidation 只能在 Render 期間調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM