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