2013-04-15 6 views
0

Я пытаюсь отобразить элемент управления Wizard в HTML-строке нажатием кнопки (с использованием Control.Render). Я уже отключил проверку событий со следующим, что отлично работает и позволяет мне отобразить всю строку. Я делаю это в пользовательском элементе управления, который содержит мастер:Bypass Page.VerifyRenderingInServerForm

protected void Page_Init(object sender, EventArgs e) 
{ 
    if (Request.Form["__EVENTTARGET"] != null 
     && Request.Form["__EVENTTARGET"] == btnPrint.ClientID.Replace("_", "$")) 
    { 
     Page.EnableEventValidation = false; 
    } 
} 

Хотя это работает, я хотел бы, чтобы сделать контроль мастеров самостоятельно. Я понимаю, что я могу переопределить Page.VerifyRenderingInServerForm для того, чтобы предотвратить страницу от бросать исключение при попытке сделать этот контроль на своих собственных (без runat="server" формы тегов), например так:

public override void VerifyRenderingInServerForm(Control control) 
{ 
    // base.VerifyRenderingInServerForm(control); 
} 

Однако, я не хотите полностью отменить это. Есть ли способ, я могу обойти это динамически, либо:

  • Для конкретного PostBack, в котором кнопка в вопросе щелкнули, или ...
  • Специально для контроля мастера?

ответ

1

Как о чем-то вроде:

public override void VerifyRenderingInServerForm(Control control) 
{ 
    if (!SkipVerifyRenderingInServerForm) 
    { 
     base.VerifyRenderingInServerForm(control); 
    } 
} 

public bool SkipVerifyRenderingInServerForm 
{ 
    get 
    { 
     object o = HttpContext.Current.Items["SkipVerifyRenderingInServerForm"]; 
     return (o == null) ? false : (bool) o; 
    } 
    set 
    { 
     HttpContext.Current.Items["SkipVerifyRenderingInServerForm"] = value; 
    } 
} 

Затем можно установить SkipVerifyRenderingInServerForm в true в обработчике события нажатия кнопки.