【问题标题】:2 textbox with same event reset global variable?2 具有相同事件重置全局变量的文本框?
【发布时间】:2014-05-05 11:28:43
【问题描述】:

我有 2 个文本框和一个标签。两个文本框都有相同的事件处理程序,它对任何文本框都是通用的。问题是当我尝试将文本框中的两个值都添加到全局变量时,我只显示了最新修改的文​​本框中的值?

两个文本框都有AutoPostBack="True"

我在这里做错了什么?

public partial class _Default : System.Web.UI.Page
{
    int total;

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void textbox_TextChanged(object sender, EventArgs e)
    {
        TextBox tb = (TextBox)sender;

        total += int.Parse(tb.Text);

        Label1.Text = total.ToString();
    }
}

【问题讨论】:

  • 在您的代码中,我只看到您访问一个文本框,另一个在哪里?你能告诉我你的ASPX吗?您最好使用 JQuerey 并更新一个隐藏的文本框?我不认为 SENDER 可以保存“两个”对象,它很可能会保存上次更改的对象...如果您走那条路线,您可能会使用 WebMethods 来触发服务器端操作..我可以帮助您。
  • 这个事件我的意思是对我可能使用的任何文本框都是通用的...这是我的简单示例,但我必须有 30 个这样的事件,而且都是不同的类别。所以我这样做? (TextBox)sender 是个坏主意?
  • 我认为这是个坏主意,请使用 JQuerey 和 WebMethods,如果您需要帮助,请告诉我
  • 我认为在服务器端管理 30 多个服务器实际上可能很慢?如果您所做的只是计算总数,则使用 JavaScript 进行计算,然后在您想使用该总数变量执行服务器端操作时调用 WebMethod...
  • 搜索“ASP.Net - 如何在回发之间存储价值”,您应该会在结果中找到答案。

标签: c# html asp.net webforms


【解决方案1】:

每次回发都会重置变量“total”。您可以使用事件“TextChanged”来添加两个文本框。所以试试这个:

public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void textbox_TextChanged(object sender, EventArgs e)
    {
        int total;        

        total = int.Parse(this.TextBox1.Text) + int.Parse(this.TextBox2.Text);

        Label1.Text = total.ToString();
    }
}

我们还应该放入 try/catch 块......

【讨论】:

  • +1 指出每次使用句柄时,变量都会重置。
【解决方案2】:

由于两个文本框都有 AutoPostBack="True"textbox_TextChanged 处理程序在单独的回发上执行,并且由于总字段在 ViewState 或 Session 中都没有持久化,因此每个运行的 textbox_TextChanged 方法的初始值都为 0。您需要明确计算两个文本框的总值,如下所示:

protected void textbox_TextChanged(object sender, EventArgs e)
{

    var total = int.Parse(textBox1.Text) + int.Parse(textBox2.Text);

    Label1.Text = total.ToString();
}

当然,最好使用 TryParse 方法并检查 Text 属性是否有 null 和空字符串值。

【讨论】:

  • 对不起,我不够清楚。我想将最后更改的值添加到总值中。这样我就不必填写所有的文本字段。
  • 假设用户将更改第一个文本框的文本两次:第一次打印 10,之后打印 20。总数必须为 30?
  • 是的,是的。我宁愿不硬编码任何东西......但我想我只会在字符上拆分 ID 等等......我认为这解决了我的问题 LOL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2016-12-26
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多