存储前一个值,并根据新值进行检查
本文关键字:进行检查 新值 一个 存储 | 更新日期: 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将是另一种选择。