C# can';当我在asp.net中禁用viewstate并且我的viewstate太大时,我无法访问窗体中的控件;我不想启用它

C# can';当我在asp.net中禁用viewstate并且我的viewstate太大时,我无法访问窗体中的控件;我不想启用它,c#,asp.net,viewstate,C#,Asp.net,Viewstate,我想在表单中禁用我的viewstate,因为它太大(每页大约1mb),这是因为从数据库检索了一些数据,而在同一表单的其他位置,我想从母版页访问控件。 但是,当我将Listview的viewstate设置为false时,我将得到以下错误: 对象引用未设置为 对象的实例 在这种情况下我该怎么办? 维斯特太笨重了 下面是我为访问特定控件所写的内容: Control cc = Page.Master.FindControl("mainContent").FindControl("ListView1").

我想在表单中禁用我的viewstate,因为它太大(每页大约1mb),这是因为从数据库检索了一些数据,而在同一表单的其他位置,我想从母版页访问控件。 但是,当我将Listview的viewstate设置为false时,我将得到以下错误:

对象引用未设置为 对象的实例

在这种情况下我该怎么办? 维斯特太笨重了 下面是我为访问特定控件所写的内容:

Control cc = Page.Master.FindControl("mainContent").FindControl("ListView1").FindControl("itemPlaceholderContainer");

        foreach (Control ListItemctrl in cc.Controls)
        {
            Control lblNewsId = ListItemctrl.FindControl("lblNewsID");
            if (lblNewsId != null)
            {
                Type t = lblNewsId.GetType();
                if (t.FullName == "System.Web.UI.WebControls.Label")
                {

                    string newsID = ((Label)lblNewsId).Text;

                    foreach (Control childCtrl in ListItemctrl.Controls)
                    {


                        CheckBox ctrlCB = childCtrl.FindControl("chkItem") as CheckBox;

                        if (ctrlCB.Checked)
                        {

                            //based on DDLAction we will do the things ;)


                        }
                        if (childCtrl.FindControl("chkItem") != null)
                            break;

                    }//end foreach childCtrl
                }
            }//end outer if

        }//end foreach listItenctrl

您可以禁用整个页面的viewstate,并有选择地为控件启用它,如下所述


谢谢,但我有一个ListView,其中有一个复选框控件,我需要检查是否选中了批处理任务的复选框,当我禁用viewstate时,我将得到上述错误。。。如果你阅读了上面的代码,你就会知道我应该从母版页访问什么。通过为你的逻辑创建方法并从你的页面调用它,让母版页负责怎么样。顺便说一句,复选框的值只存储在客户端?如果没有,请尝试查询数据源而不是。是的,值仅在客户端显示,我想我可以将策略更改为ajax,以避免使用viewstate:-?是的,我认为最好是将代码隐藏起来。只需为复选框将ClientMode设置为可预测,您就完成了