Asp.net 在父控件中禁用时,如何为子自定义控件启用ViewState?

Asp.net 在父控件中禁用时,如何为子自定义控件启用ViewState?,asp.net,viewstate,custom-server-controls,Asp.net,Viewstate,Custom Server Controls,我试图创建一个自定义控件,该控件类似于“gridview”,但具体用于实现某些自定义接口的业务对象 在这样做的过程中,我遇到了以下问题 我有一个禁用了viewstate的控件(我不想重新启用它),它还有一个子控件,我想启用viewstate。我似乎无法使子控件上的viewstate正常工作,因为其父控件已禁用。有人知道如何使其工作吗?您不能在另一个禁用了viewstate的控件中的控件上启用viewstate 您唯一的选择是为外部控件启用它,然后为其中的所有控件(需要viewstate的控件除外

我试图创建一个自定义控件,该控件类似于“gridview”,但具体用于实现某些自定义接口的业务对象

在这样做的过程中,我遇到了以下问题


我有一个禁用了viewstate的控件(我不想重新启用它),它还有一个子控件,我想启用viewstate。我似乎无法使子控件上的viewstate正常工作,因为其父控件已禁用。有人知道如何使其工作吗?

您不能在另一个禁用了viewstate的控件中的控件上启用viewstate

您唯一的选择是为外部控件启用它,然后为其中的所有控件(需要viewstate的控件除外)禁用它

任何容器上的EnableViewState属性都将覆盖该容器中所有控件的行为

祝你好运

编辑:
您可能希望查看您的createChildControls()方法,并使用EnableViewState属性为自定义控件中的每个控件枚举禁用viewstate的控件。

如果您愿意手动将数据放入viewstate中(而不是让ASP.NET为您保留控件的状态),您可以将项目直接放入页面的ViewState,而不是控件的ViewState

也就是说,不要说:

this.ViewState["someKey"] = someValue;
说:


但是要小心-如果页面上有多个控件实例,则必须确保它们使用不同的键!

显然,这是可能的,因为Jason是正确的,一旦它在您上方被禁用,您就无法再向下启用它。
this.Page.ViewState["someKey"] = someValue;