返回运行总计算器的值
问题描述:
使用下面的代码我试图计算运行总值。第一个文本框被禁用,并在执行计算后分配总计值。我也跟踪所有以前的计算。返回运行总计算器的值
我的问题是这样的:如何在每次计算后更新文本框中的数字?我找不出一个办法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Calculator
{
public partial class Calculator : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
int num1 = 0;
int num2 = int.Parse(TxtNum2.Text);
int total = 0;
string option = DropDownList1.SelectedValue;
if (option == "+")
{
total = num1 + num2;
lblResult.Text += num1 + " + " + num2 + " = " + total.ToString() + "<br/>";
num1 = total;
TxtNum1.Text = num1.ToString();
}
}
}
}
答
您可以使用UpdatePanel
这样的:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
...
...
<asp:Button Text="Calculate" runat="server" ID="btnSubmit" />
<asp:UpdatePanel runat="server" id="up1" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSubmit" EventName="Click"/>
</Triggers>
<ContentTemplate>
<asp:TextBox runat="server" ID="TxtNum1"/>
</ContentTemplate>
</asp:UpdatePanel>
这将异步更新的TxtNum1
值。如果您只想使用上次计算的结果,则可以在btnSubmit_Click
方法的视图状态中保存/检索它。最好使一个属性:
protected int Result
{
get
{
return (int)(ViewState["__result"] ?? 0);
}
set
{
ViewState["__result"] = value;
}
}
现在你可以像使用普通的字段变量一样使用它(忘记viewstate thingy)。 或者,如果你想所有过去的结果,你将不得不使用另一个数据结构(List<T>
可能?),只是添加/保存/检索到/进入/从视图状态。
答
你可以显示你的标记吗?你有没有用过UpdatePanel
?如果不是,那么使用更新面板,并在其中放置标签,以便它可以异步更新。
您应该对使用ViewBag(或ViewData)并将其变量包含在视图中做一些研究。这是相当平凡的东西,你应该在教程中进行研究。 – doppelgreener 2013-05-08 00:46:49
这个操作会更好留给客户端的JavaScript。 – 2013-05-08 00:46:54
@SpencerRuport:鉴于目前的税收问题,担心客户端与服务器端可能会考虑太多。 – Guvante 2013-05-08 00:47:35