0

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

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,或者...
  • 专门针对向导控件?
4

1 回答 1

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

于 2013-04-15T13:11:25.070 回答