绕过Page.VerifyRenderingInServerForm

时间:2013-04-15 12:14:51

标签: c# asp.net webforms asp.net-2.0

我试图通过单击按钮(使用Control.Render)将Wizard控件呈现为HTML字符串。我已经使用以下内容禁用了事件验证,它可以正常工作并使我能够将整个 Page 呈现给字符串。我在包含向导​​的用户控件中执行此操作:

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

虽然这有效,但我想自己渲染Wizard控件。我知道我可以覆盖Page.VerifyRenderingInServerForm以防止页面在我尝试自己呈现此控件时(不使用runat="server"表单标记)抛出异常,如下所示:

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

但是,我不想完全覆盖它。有没有办法可以动态绕过这个:

  • 对于单击有问题按钮的特定PostBack,或者......
  • 特别是对于Wizard控件?

1 个答案:

答案 0 :(得分: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