存储前一个值,并根据新值进行检查

本文关键字:进行检查 新值 一个 存储 | 更新日期: 2023-09-27 18:15:30

我目前正在尝试存储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;
    }
}

存储前一个值,并根据新值进行检查

NET WebForms,为每个请求创建一个新的page类实例。这就是在类中使用字段的方法不起作用的原因。每次创建类时都会初始化该字段。静态字段不能解决这个问题,因为它的内容在所有用户之间共享。

此外,在每次请求时都要重置Page_Load中的值。所以这段代码应该被删除。

为了解决这个问题,您需要在页面中添加一些状态。由于作用域是页面级别的,因此可以将旧值存储在ViewState中。这样,旧的值被传输到客户端,并在回发中发送回服务器。

这个链接显示了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将是另一种选择。