<form id="form1" runat="server">
<ajaxToolkit:ToolkitScriptManager ID="tksm" runat="server"
OnAsyncPostBackError="tksm_AsyncPostBackError" />
<div align="center">
<asp:Panel ID="Panel1" runat="server" GroupingText="简易计算机" Width="750">
<table border="0" style="margin: 5px; padding: 5px">
<tr align="center">
<td>
第一个数字
</td>
<td>
运算符号</td>
<td>
第二个数字
</td>
<td width="80">
</td>
<td width="120">
运算结果
</td>
</tr>
<tr align="center" vAlign="top">
<td>
<asp:TextBox ID="txtNum1" runat="server" Width="60px" />
</td>
<td>
<asp:TextBox ID="txtOperator" runat="server" Width="30px" MaxLength="1" />
<br />
(+、-、*、/)
</td>
<td>
<asp:TextBox ID="txtNum2" runat="server" Width="60px" />
</td>
<td>
<asp:Button ID="btnCaculate" runat="server" Text="计算" OnClick="btnCaculate_Click" />
</td>
<td>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="lblResult" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnCaculate" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</td>
</tr>
</table>
</asp:Panel>
</div>
<%-- 文本框过滤器:第 1 个运算元 --%>
<ajaxToolkit:FilteredTextBoxExtender ID="FTBX1" runat="server"
TargetControlID="txtNum1"
FilterType="Numbers, Custom"
ValidChars=".-" /> <%--只能是数字 可以是小数和负数 FilterType为Custom,ValidChars才有效--%>
<%-- 文本框过滤器:运算符号 --%>
<ajaxToolkit:FilteredTextBoxExtender ID="FTBX2" runat="server"
TargetControlID="txtOperator"
FilterType="Custom"
ValidChars="+-*/" /> <%--只能是+ - * /--%>
<%-- 文本框过滤器:第 2 个运算元 --%>
<ajaxToolkit:FilteredTextBoxExtender ID="FTBX3" runat="server"
TargetControlID="txtNum2"
FilterType="Numbers, Custom"
ValidChars=".-" />
<script type="text/javascript">
// 在 PageRequestManager 的 endRequest 事件中,通知用户发生错误。
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(EndRequest);
function EndRequest(sender, args)
{
if (args.get_error())
{
$get("lblResult").innerHTML = ""; // 清除先前的结果值
alert(args.get_error().message);
args.set_errorHandled(true);
}
}
</script>
</form>
**********************计算按钮*****************************************
protected void btnCaculate_Click(object sender, EventArgs e)
{
Double dblNum1, dblNum2, dblResult;
lblResult.Text = "";
try
{ // 检查是否有输入运算数字,如果评量结果为真,就返回一个自定义的异常。
if ((txtNum1.Text.Trim().Length == 0) ||
(txtNum2.Text.Trim().Length == 0))
throw new Exception("您没有指定运算数字。");
dblNum1 = Convert.ToDouble(txtNum1.Text);
dblNum2 = Convert.ToDouble(txtNum2.Text);
switch (txtOperator.Text)
{
case "+":
dblResult = dblNum1 + dblNum2;
break;
case "-":
dblResult = dblNum1 - dblNum2;
break;
case "*":
dblResult = dblNum1 * dblNum2;
break;
case "/":
// 检查除数是否为零,如果评量结果为真,就返回一个自定义的异常。
if (dblNum2 == 0)
throw new Exception("除数不能为 0。");
dblResult = dblNum1 / dblNum2;
break;
default:
// 返回一个自定义的异常。
throw new Exception("您没有指定运算符号。");
}
lblResult.Text = dblResult.ToString();
}
catch (Exception ex)
{
if ((txtNum1.Text.Trim().Length == 0) || (txtNum2.Text.Trim().Length == 0))
{
ex.Data["ExtraInfo"] = "/n请输入数字。";
throw ex;
}
if (txtOperator.Text.Trim().Length == 0)
{
ex.Data["ExtraInfo"] = "/n请输入运算符号。";
throw ex;
}
if (Convert.ToDouble(txtNum2.Text) == 0)
{
ex.Data["ExtraInfo"] = "/n请输入非 0 的除数。";
throw ex;
}
}
}
protected void tksm_AsyncPostBackError(
object sender, AsyncPostBackErrorEventArgs e)
{
if (e.Exception.Data["ExtraInfo"] != null)
{
tksm.AsyncPostBackErrorMessage =
"/n" + e.Exception.Message +
e.Exception.Data["ExtraInfo"].ToString();
}
else
tksm.AsyncPostBackErrorMessage = "/n发生一个无法预知的错误。";
}