首页 > 解决方案 > 如果使用 Validator,try-catch 会变得无关紧要吗?

问题描述

我的 ASP.NET 计算器项目的 .aspx.cs -文件中有以下代码:

    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 文件(由于自动生成代码导致格式混乱):

<%@ 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 控件进行了验证,如果输入不是数字(双精度),则 CompareValidator 将显示错误消息。但是我想尝试一下是否可以在执行计算的后台代码中发现错误。

捕获部分应插入“检查您的输入!” 在计算结果正常的TextBox中,但是如果我尝试这样做没有反应,例如“ 2 + asd ”,这应该会导致错误。Validator 确实显示了第二个值“asd”的消息,因为它不是双精度值,但是来自 catch-block 的消息没有出现。

我在这里使用了错误的异常还是验证器已经进行了异常处理并阻止后台代码访问这些值?

简而言之,当 CompareValidator 已经显示它自己的消息时,我可以从 try-catch 块中获得第二条错误消息到 Result.Text 吗?

标签: c#asp.netvalidationexception

解决方案


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


推荐阅读