如果使用Validator,try-catch是否变得无关紧要?

时间:2019-06-23 21:34:49

标签: c# asp.net validation exception

我在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 -->
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <!-- Validate first input value -->
        <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="Value1" ErrorMessage="Not a number!" Operator="DataTypeCheck" Type="Double">
        </asp:CompareValidator>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <!-- Validate second input value -->
        <asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="Value2" ErrorMessage="Not a number!" Operator="DataTypeCheck" Type="Double">
        </asp:CompareValidator>
        <br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:TextBox ID="Value1"  runat="server" ToolTip="Give value 1"></asp:TextBox> <!-- TextBox for value 1 -->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:TextBox ID="Value2"  runat="server" ToolTip="Give value 2"></asp:TextBox> <!-- TextBox for value 2 -->
&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;
        <asp:TextBox ID="Result" runat="server" ReadOnly="True" ToolTip="Result"></asp:TextBox> <!-- TextBox for result of the calculation -->
        <br />
        <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:Button ID="Addition" runat="server" Text="+" Width="61px" OnClick="Addition_Click" />
&nbsp;&nbsp;&nbsp;&nbsp;
        <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获取第二条错误消息吗?

1 个答案:

答案 0 :(得分:1)

好的,我最终保留了try-catch和Validator以防万一。