Try-catch становится неактуальным, если используется Validator? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть следующий код в .aspx.cs-файле моего проекта калькулятора ASP.NET:

    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>

Значения уже проверены в веб-форме с помощью CompareValidator -control, и если ввод не является числом (double), тогда CompareValidator отобразит сообщение об ошибке.Но я хотел попробовать, смогу ли я поймать ошибку с помощью фонового кода, который выполняет вычисления.

Часть перехвата должна вставить «Проверьте ваш ввод!»в TextBox, где обычно идут результаты вычислений, но я не реагирую, если я попытаюсь это сделать, например «2 + asd», что должно вызвать ошибку.Валидатор действительно показывает сообщение для второго значения «asd», поскольку оно не является двойным значением, но сообщение из блока catch не появляется.

Использую ли я неправильное исключение здесь, или Валидатор уже делаетобработка исключений и предотвращение доступа к значениям из фонового кода?

Короче, могу ли я получить второе сообщение об ошибке Result.Text из блока try-catch, когда CompareValidator уже показывает свое собственное сообщение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...