Asp.net 如何在启用控件以备将来回发时转储控件的viewstate?

Asp.net 如何在启用控件以备将来回发时转储控件的viewstate?,asp.net,Asp.net,我们有一个Telerik网格(即ASP.Net香草网格的增强版)。在一些回发中,我们对网格进行了重大更改,我们不希望为该页面加载的网格控件加载viewstate,但我们希望将viewstate加载到将来的加载中。在所有情况下,我们都希望保存viewstate,以防用户每次使用相同的数据源 基本上是这样的: 页面最初加载 视图状态已保存 用户在页面上操纵的控件不是change datasource控件 页面发回 创建的控件 视图状态已加载 已处理的事件 视图状态已保存 用户返回页面 用户操纵的数

我们有一个Telerik网格(即ASP.Net香草网格的增强版)。在一些回发中,我们对网格进行了重大更改,我们不希望为该页面加载的网格控件加载viewstate,但我们希望将viewstate加载到将来的加载中。在所有情况下,我们都希望保存viewstate,以防用户每次使用相同的数据源

基本上是这样的:

  • 页面最初加载
  • 视图状态已保存
  • 用户在页面上操纵的控件不是change datasource控件
  • 页面发回
  • 创建的控件
  • 视图状态已加载
  • 已处理的事件
  • 视图状态已保存
  • 用户返回页面
  • 用户操纵的数据源更改控件
  • 页面发回
  • 创建的控件
  • Viewstate已加载(我们不希望加载网格的Viewstate,但无论如何都是如此)
  • 已处理的事件
  • Viewstate已保存(我们希望保存所有Viewstate,包括新网格的Viewstate)
  • 用户返回页面

对于不想保存ViewState信息的控件,设置EnableViewState=False。下面是一篇关于视图状态的精彩文章:

您可以从相关的网格控件派生,然后在不想加载viewstate时重写LoadViewState方法以不加载viewstate

public class MyGrid : BaseGrid
{
    public bool IsNew { get; set; }

    public override void LoadViewState(object viewState)
    {
        if (!this.IsNew)
        {
            base.LoadViewState(viewState);
        }
    }
}

您能解释一下“我们不希望应用viewstate”吗?viewstate是在处理上一个请求时保存的,但由于按下按钮,用户希望执行一个操作,将网格源更改为另一个源(因此它将具有不同的列等)我们不希望前一个网格的viewstate应用于新网格,因为它是新的数据源。并不是我不想保存它。如果网格内容保持不变,我希望加载viewstate,但是如果网格内容由于用户加载不同的数据源而发生根本性变化,那么我希望不加载viewstate。但无论哪种情况,我都希望保存viewstate。