没有YSOD的例外情况

时间:2012-11-05 10:11:18

标签: c# asp.net error-handling unhandled-exception

所以我设置了我的Global.asax文件,在发生无法处理的异常时给我发电子邮件。我收到一封包含用户看不到的异常的电子邮件,并且代码似乎在客户端正常工作,页面加载并执行预期的操作。

我在aspx文件中有这个代码,它显示了一个基于角色的复选框或以特定字符开头的客户编号......

<%  if (Roles.IsUserInRole("Admin") ||
                   txtAccountNo.Text.Substring(0, 2) == "UK" ||
                   txtAccountNo.Text.Substring(0, 2) == "FR" ||
                   txtAccountNo.Text.Substring(0, 2) == "IT" ||
                   txtAccountNo.Text.Substring(0, 2) == "DK" ||
                   txtAccountNo.Text.Substring(0, 2) == "SE")
               { %>
            <label for="chkExpressDelivery"><asp:Literal ID="Literal14" runat="server" Text="<%$ Resources:LocalizedText, fieldLabel_ExpressDelivery %>"></asp:Literal><span class="small"></span></label>
            <asp:CheckBox ID="chkExpressDelivery" runat="server" Width="50px" CssClass="_checkbox _normalcheckbox" Text="&nbsp;" />
            <%} %>

现在txtAccountNo是从aspx.cs文件的Page_Load事件中的用户配置文件属性填充的。

我在电子邮件中收到的错误消息(客户从未见过)

  

索引和长度必须指向字符串中的位置。参数名称:长度

我理解错误消息 - 它说txtAccountNo.Text在代码运行时基本上是空的,但我不明白的是,客户端从未看到此错误,并且页面的行为与我想要的一样。

但是,如果我打开web.config文件中的自定义错误消息,客户端将被定向到自定义错误页面,但没有它,就客户端而言,没有错误。

那么如何更正此错误以便我可以打开自定义错误页面?

我希望这是有道理的!如果您需要更多信息,请与我们联系。

由于

斯图尔特

此代码现在有效......

<%  if (txtAccountNo.Text.Length > 0 && (Roles.IsUserInRole("Admin") ||
               txtAccountNo.Text.Substring(0, 2) == "UK" ||
               txtAccountNo.Text.Substring(0, 2) == "FR" ||
               txtAccountNo.Text.Substring(0, 2) == "IT" ||
               txtAccountNo.Text.Substring(0, 2) == "DK" ||
               txtAccountNo.Text.Substring(0, 2) == "SE"))
           { %>
        <label for="chkExpressDelivery"><asp:Literal ID="Literal14" runat="server" Text="<%$ Resources:LocalizedText, fieldLabel_ExpressDelivery %>"></asp:Literal><span class="small"></span></label>
        <asp:CheckBox ID="chkExpressDelivery" runat="server" Width="50px" CssClass="_checkbox _normalcheckbox" Text="&nbsp;" />
        <%} %>

1 个答案:

答案 0 :(得分:1)

有些错误永远不会显示给客户端。当我在页面中使用AJAX控件并且客户端具有某个IE版本时,它发生在我身上。客户端没有受到影响,但它一直通过Emah发送错误邮件。
激活自定义错误时,您的应用程序或IIS服务器可能会捕获错误并以某种方式解释它。像这样的东西: mvc3 error on webserver, only get generic response也许这就是重定向发生的原因 至于错误的来源(txtAccountNo.Text为空):如果代码在页面事件生命周期中的某个时刻(例如初始化)运行,则控件中没有数据。 为避免错误,您可以向if子句添加另一个条件,并检查txtAccountNo.Length&gt; 0