RegisterForEventValidation может быть вызван только во время рендеринга - PullRequest
18 голосов
/ 29 августа 2011

У меня есть веб-метод, который будет вызываться из 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 можно вызывать только во время рендеринга.

Я уже включил EnableEventValidation = "false" для текущей aspx, также отключил viewstate.но все равно я получаю ту же ошибку.Есть идеи по этому поводу?

Ответы [ 2 ]

47 голосов
/ 12 июня 2013

Решение состоит в том, чтобы отключить проверку события страницы как

<%@ Page ............ EnableEventValidation="false" %>

и переопределить VerifyRenderingInServerForm, добавив следующий метод в свой код C # за

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

9 голосов
/ 04 апреля 2013

Согласно второй ссылке Брайана, не переходя дальше, просто сделайте это:

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); 
...