0

使用以下代码,我试图计算一个运行总值。第一个文本框被禁用,并在执行计算后分配总计值。我也在跟踪所有以前的计算。

我的问题是:如何在每次计算后更新文本框中的数字?我想不出办法。

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();
        }
    }
}
}
4

2 回答 2

0

你可以使用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。如果您只想使用上次计算的结果,您可以在 viewstate inbtnSubmit_Click方法中保存/检索它。最好让它成为一个属性:

protected int Result
{
   get
   {            
        return (int)(ViewState["__result"] ?? 0);
   }   
   set
   {
        ViewState["__result"] = value;
   }
}

现在您可以像使用普通字段变量一样使用它(忘记视图状态)。或者,如果您想要所有过去的结果,您将不得不使用另一个数据结构(List<T>可能是?)并且只需添加/保存/检索到/进入/来自视图状态。

于 2013-05-08T01:10:22.123 回答
0

你能显示你的标记吗?你用过UpdatePanel吗?如果没有,则使用更新面板并将标签放入其中,以便可以异步更新。

于 2013-05-08T10:07:38.760 回答