加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – ASP.NET WebForms自定义UserControl – base.SaveViewStat

发布时间:2020-12-15 08:48:57 所属栏目:百科 来源:网络整理
导读:我有一个自定义UserControl我正在使用哪些主机动态创建控件,我遇到了一个奇怪的情况,我似乎失去了ViewState信息.在我对base.SaveViewState()调用的重写的SaveViewState方法中,我希望它返回一个包含ViewState中所有内容的对象,但它返回null. protected overri
我有一个自定义UserControl我正在使用哪些主机动态创建控件,我遇到了一个奇怪的情况,我似乎失去了ViewState信息.在我对base.SaveViewState()调用的重写的SaveViewState方法中,我希望它返回一个包含ViewState中所有内容的对象,但它返回null.
protected override object SaveViewState()
{

    object[] tempState = new object[2];
    tempState[0] = base.SaveViewState(); //***suspected issue here,tempState[0] == null -- why?
    //? this.ViewState["CompanyID"] returns me the guid I'm expecting
    //... code instantiating and populating lstDataControlInfos
    tempState[1] = lstDataControlInfos;
    return tempState;
}

我在该方法中放置了一个断点,我可以使用立即窗口查询ViewState [“CompanyID”]并验证ViewState中确实存在一个CompanyID.也许我误解了一些关于ViewState的东西,但该调用是否应该返回已经存在于ViewState中的内容(包括我的CompanyID)?在重写的LoadViewState方法中,问题在回发上成为问题,因为我不再有任何方法将CompanyID从ViewState中取出;它回来了.

protected override void LoadViewState(object savedState)
{
    object[] tempState = (object[])savedState;
    //tempState[0] == null,as it was stored in the previous SaveViewState call
    //any reference to ViewState["CompanyID"] comes back null
    base.LoadViewState(tempState[0]);
}

我提到我有动态控件我正在序列化并从此控件中的ViewState反序列化,这些似乎都正常工作.什么会导致base.SaveViewState()在我知道事实时返回null并且可以在SaveViewState调用期间验证(通过立即窗口)ViewState中是否有数据?

解决方法

将值保存到ViewState时,如果正在跟踪ViewState,则该值将标记为脏.

跟踪从TrackViewState开始,在Initialize之后和Load之前.

跟踪在SaveViewState中结束,该状态在PreRender之后.

如果在ViewState中设置值时未跟踪ViewState,则在调用SaveViewState时不会保留ViewState.这是一件好事:它意味着您可以在Init阶段使用ViewState,而不会使序列化的ViewState膨胀.

当您向树动态添加控件时,您应该注意:

>在将控件添加到控件树之前设置的值将不会保留,即使在跟踪ViewState时添加控件也是如此.
>如果您正处于跟踪ViewState的阶段,则将控件添加到控件树后设置的值将保持不变.

您在页面生命周期中的哪一点设置ViewState [“CompanyID”],并且在将控件添加到控件树之前或之后是这样做的?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读