1

我有一个用于 asp.net 站点的自定义错误处理程序。

void Application_Error(object sender, EventArgs e)
{
    // Code that runs when an unhandled error occurs
    //if (System.Configuration.ConfigurationManager.AppSettings["ProductionMode"] == "Yes")
    #if (!DEBUG)
    Server.Transfer("~\\GlobalExceptionHandler.aspx");
    #endif
}

它在检索异常信息时工作得很好而且很花哨,因为它只会被卡住Server.getLastException()并通过电子邮件发送给我以供审查

但是,我在页面上有一些文本框,我想将这些文本框的值与电子邮件一起发送。也许这不是我要访问的 DOM,而是那些已发布的变量。

我试着看,HttpContext.Current.Request.Form但它没有显示任何键。

那么有谁知道在全局捕获异常时如何访问表单值?

4

1 回答 1

2

访问表单值

要访问 中的表单值Global.Application_Error,您只需使用HttpContext.Current.Request.Form.

这是一个概念证明,其中页面立即在 post(back) 上引发异常以命中应用程序错误处理程序:

void Application_Error(object sender, EventArgs e)
{
    var test = HttpContext.Current.Request.Form;
}

在赋值上设置一个断点test,然后在它被击中时跨过它(用F10),您可以看到它test确实设置为 post(back) 的 form-values 集合。

访问回发控制值

或者,您可以通过在回发时将它们添加到会话来访问回发控件值,例如...

// ************code behind
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    Session["TextBox1"] = TextBox1.Text;
}

...,并在应用程序错误处理程序中访问会话 - 例如:

// ************Global.asax.cs
protected void Application_Error(object sender, EventArgs e)
{
    // Use Session["TextBox1"].
}

一个CodeVerge 线程说得很好——尤其是 Benson Yu 的回复。

于 2014-07-30T06:14:02.343 回答