C# 存储以前的值并对照新值进行检查
我当前正在尝试存储C# 存储以前的值并对照新值进行检查,c#,asp.net,code-behind,C#,Asp.net,Code Behind,我当前正在尝试存储文本框的以前值,并在ontextchanged时将其与新值进行比较。但是,现在的问题是,每当我尝试存储上一个值进行比较时,该值都是null 有没有办法存储以前的值 这是我试过的代码。假设tbDesc有一个旧值Hello World,我用Hello ASPX 在ASP.NET WebForms中,将为每个请求创建page类的新实例。这就是为什么在类中使用字段的方法不起作用的原因。每次创建类时,都会初始化该字段。静态字段不能解决这个问题,因为它的内容在所有用户之间共享 此外,在每次
文本框的以前值,并在ontextchanged
时将其与新值进行比较。但是,现在的问题是,每当我尝试存储上一个值进行比较时,该值都是null
有没有办法存储以前的值
这是我试过的代码。假设tbDesc
有一个旧值Hello World
,我用Hello
ASPX
在ASP.NET WebForms中,将为每个请求创建page类的新实例。这就是为什么在类中使用字段的方法不起作用的原因。每次创建类时,都会初始化该字段。静态字段不能解决这个问题,因为它的内容在所有用户之间共享
此外,在每次请求时都会重置页面加载中的值。所以这个代码应该被删除
为了解决这个问题,您需要在页面中添加一些。由于作用域是页面级别,因此可以将旧值存储在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。在ASP.NET WebForms中,会为每个请求创建页面类的新实例。这就是为什么在类中使用字段的方法不起作用的原因。每次创建类时,都会初始化该字段。静态字段不能解决这个问题,因为它的内容在所有用户之间共享
此外,在每次请求时都会重置页面加载中的值。所以这个代码应该被删除
为了解决这个问题,您需要在页面中添加一些。由于作用域是页面级别,因此可以将旧值存储在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是另一种选择。因为您仅在页面加载中设置旧值。您应该在TextChanged事件的末尾设置旧值。或者使用OnBlur事件,这样旧值只在文本框焦点移除时设置。还有一种更好的方法。使用定时器。当用户在3秒钟后停止键入,然后设置旧值。@M.kazemAkhgary问题是,在页面加载时,我设置了旧值,但是在textchanged事件中,旧值为null。@M.kazemAkhgary我希望保留旧值,而不是更改它。因为您仅在页面加载中设置了旧值。您应该在TextChanged事件的末尾设置旧值。或者使用OnBlur事件,这样旧值只在文本框焦点移除时设置。还有一种更好的方法。使用定时器。当用户在3秒钟后停止输入,然后设置旧值。@M.kazemAkhgary问题是,在页面加载时,我设置了旧值,但是在textchanged事件中,旧值为null。@M.kazemAkhgary我希望保留旧值,而不是更改它。