我在ASP.NET计算器项目的.aspx.cs -file中有以下代码:
protected void Addition_Click(object sender, EventArgs e)
{
try
{
double value1 = double.Parse(Value1.Text);
double value2 = double.Parse(Value2.Text);
double result = value1 + value2;
Result.Text = result.ToString();
}
catch (NotFiniteNumberException)
{
Result.Text = "Check your input!";
throw;
}
}
.aspx -file(由于自动生成代码而造成的混乱格式):
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CalcForm.aspx.cs" Inherits="task1.CalcForm" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Calculator</title>
<link rel="stylesheet" href="CalcStyle.css"/> <!-- Style for calculator app -->
</head>
<body>
<form id="CalcForm" runat="server"> <!-- Form for the calculator -->
<!-- Validate first input value -->
<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="Value1" ErrorMessage="Not a number!" Operator="DataTypeCheck" Type="Double">
</asp:CompareValidator>
<!-- Validate second input value -->
<asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="Value2" ErrorMessage="Not a number!" Operator="DataTypeCheck" Type="Double">
</asp:CompareValidator>
<br />
<asp:TextBox ID="Value1" runat="server" ToolTip="Give value 1"></asp:TextBox> <!-- TextBox for value 1 -->
<asp:TextBox ID="Value2" runat="server" ToolTip="Give value 2"></asp:TextBox> <!-- TextBox for value 2 -->
=
<asp:TextBox ID="Result" runat="server" ReadOnly="True" ToolTip="Result"></asp:TextBox> <!-- TextBox for result of the calculation -->
<br />
<br />
<asp:Button ID="Addition" runat="server" Text="+" Width="61px" OnClick="Addition_Click" />
<asp:Button ID="Substraction" runat="server" Text="-" Width="61px" />
<br />
</form>
</body>
</html>
这些值已经在Web窗体中使用CompareValidator -control进行了验证,并且如果输入的不是数字(双精度),则CompareValidator将显示一条错误消息。但是我想尝试是否可以在执行计算的后台代码中发现错误。
捕获部分应插入“检查您的输入!”在计算结果通常可以到达的TextBox中,但是如果我尝试执行操作则没有任何反应,例如“ 2 + asd”,这会导致错误。验证程序会显示第二个值“ asd”的消息,因为它不是双精度值,但不会出现来自catch块的消息。
我在这里使用错误的Exception吗?还是Validator已经执行了Exception处理并防止后台代码访问这些值?
简而言之,当CompareValidator已经显示出自己的消息时,我可以从try-catch块中向Result.Text获取第二条错误消息吗?
答案 0 :(得分:1)
好的,我最终保留了try-catch和Validator以防万一。