Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储以前的值并对照新值进行检查_C#_Asp.net_Code Behind - Fatal编程技术网

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我希望保留旧值,而不是更改它。