我目前正在尝试存储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;
}
}
答案 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将是另一种选择。