0

因此,我设置了我的 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;" />
        <%} %>
4

1 回答 1

1

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

于 2012-11-05T11:18:28.587 回答