У меня есть следующий код в .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 -->
<!-- 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>
Значения уже проверены в веб-форме с помощью CompareValidator -control, и если ввод не является числом (double), тогда CompareValidator отобразит сообщение об ошибке.Но я хотел попробовать, смогу ли я поймать ошибку с помощью фонового кода, который выполняет вычисления.
Часть перехвата должна вставить «Проверьте ваш ввод!»в TextBox, где обычно идут результаты вычислений, но я не реагирую, если я попытаюсь это сделать, например «2 + asd», что должно вызвать ошибку.Валидатор действительно показывает сообщение для второго значения «asd», поскольку оно не является двойным значением, но сообщение из блока catch не появляется.
Использую ли я неправильное исключение здесь, или Валидатор уже делаетобработка исключений и предотвращение доступа к значениям из фонового кода?
Короче, могу ли я получить второе сообщение об ошибке Result.Text из блока try-catch, когда CompareValidator уже показывает свое собственное сообщение?