存储以前的值并检查新值

时间:2016-10-30 13:18:14

标签: c# asp.net code-behind

我目前正在尝试存储Textbox的上一个值,并在ontextchanged时将其与新值进行比较。但是,现在的问题是,每当我尝试存储以前的值进行比较时,值为null

有没有办法存储以前的值?

这是我尝试过的代码。假设tbDesc的旧值为Hello World,我使用Hello编辑文本框

ASPX

public string oldvalue = "";

protected void Page_Load(object sender, EventArgs e)
{
  oldvalue = tbDesc.Text;
}

protected void tbDesc_TextChanged(object sender, EventArgs e)
{
  string newvalue = tbDesc.Text;

        if (newvalue != oldvalue)
       {
        tbDesc.BackColor = Color.Yellow;
       }
        else
      {
        tbDesc.BackColor = Color.White;
    }
}

1 个答案:

答案 0 :(得分:0)

在ASP.NET WebForms中,为每个请求创建一个新的页面类实例。这就是为什么在类中使用字段的方法不起作用的原因。每次初始化该字段,创建该类。静态字段无法解决此问题,因为其内容在所有用户之间共享。

此外,您还会在每次请求时重置Page_Load中的值。所以应删除此代码。

要解决此问题,您需要在页面中添加一些state。由于范围是页面级别,您可以将旧值存储在ViewState中。这样,旧值将传输到客户端并以回发方式发送回服务器。

link显示了ViewState的概述。

以下示例显示了如何使用ViewState跨请求存储值:

private string OldValue
{
    get
    {
        var viewStateVal = ViewState["OldValue"] as string;
        if (viewStateVal == null)
            return string.Empty;
        return viewStateVal;
    }
    set
    {
        ViewState["OldValue"] = value;
    }
}

protected void tbDesc_TextChanged(object sender, EventArgs e)
{
  string newvalue = tbDesc.Text;
  if (newvalue != OldValue)
  {
      tbDesc.BackColor = Color.Yellow;
      OldValue = newvalue;
  }
  else
      tbDesc.BackColor = Color.White;
}

在某些情况下,可能会禁用ViewState(例如,减小页面大小以节省一些带宽)。在这种情况下,使用Cookie将是另一种选择。