我正在尝试创建一个自定义控件,它类似于“gridview”控件,但专门用于实现某些自定义接口的业务对象。
在这样做时,我遇到了以下问题。
我有一个控件,我禁用了视图状态(并且我不想重新启用它),它有一个我希望启用视图状态的子控件。我似乎无法让子控件上的视图状态工作,因为它的父母被禁用。有没有人知道如何让它发挥作用?
我正在尝试创建一个自定义控件,它类似于“gridview”控件,但专门用于实现某些自定义接口的业务对象。
在这样做时,我遇到了以下问题。
我有一个控件,我禁用了视图状态(并且我不想重新启用它),它有一个我希望启用视图状态的子控件。我似乎无法让子控件上的视图状态工作,因为它的父母被禁用。有没有人知道如何让它发挥作用?
您不能在另一个控件中禁用视图状态的控件上启用视图状态。
您唯一的选择是为外部控件启用它,然后为其中的所有控件关闭它,除了您需要视图状态的控件。
任何容器上的 EnableViewState 属性都将覆盖该容器内所有控件的行为。
祝你好运!
编辑: 您可能希望查看您的CreateChildContols()方法并使用EnableViewState属性从那里为自定义控件中的每个控件枚举禁用视图状态的控件。
如果您愿意手动将数据放入 ViewState(而不是让 ASP.NET 为您保留控件的状态),您可以将项目直接放入页面的 ViewState,而不是控件的 ViewState。
即而不是说:
this.ViewState["someKey"] = someValue;
说:
this.Page.ViewState["someKey"] = someValue;
不过要小心——如果页面上有多个控件实例,则必须确保它们使用不同的键!
显然这对于 Asp.Net 4.0是可能的