asp.net – 为什么我无法访问usercontrol中的页面viewstate?
我在一个页面上的viewstate中存储了一个对象。现在当我访问userControl上的相同视图对象时,它显示为null。我甚至尝试在usercontrol和page.B中创建与该名称相同的视图状态。其持有不同的值。
我明白viewstate是受保护的属性。这个事情在上述情景中如何实现,或者有什么其他的原因。 编辑: 用户控件在页面标记中。我没有动态加载它。 我有一个页面EditFacilityworkType.aspx。在页面上我有一个用户控件FacilityWorkTypeDetails.aspx(FacilityWorkTypeDetails1)。在这个用户控件里面我有一个用户控件Workflow.aspx(Workflow1) Page_Load()of Page FacilityWorktype facilityWorkType = facilityDetails.GetFacilityWorktypeDetail(SessionHelper.FacilityWorkTypeID); ViewState["WorkFlow"] = facilityWorkType.FacilityWorkTypeWorkFlow Inside usercontrol FacilityWorkTypeDetails.aspx。我有一个财产 public FacilityWorktype FacilityWorkTypeDetails { get { #region Fill FacilityWorktype return GetEntityFromControl(); #endregion } set { PopulateControls(value); } } 现在我设置页面的页面加载属性 FacilityWorkTypeDetails1.FacilityWorkTypeDetails = facilityWorkType; 在Workflow.aspx里面,我有一个属性 /// <summary> /// Property to fill entity object from controls on this page /// </summary> public WorkFlow WorkFlowDetails { get { return GetEntityFromControls(); } set { BindTranscriptionMethodDDL(ddlTranscMethod); PopulateControls(value); } } 现在,在WorkWorkTypeDetails1的PopulateControls()中,我正在设置workflow1的属性 private void PopulateControls(FacilityWorktype value) Workflow1.WorkFlowDetails = value.FacilityWorkTypeWorkFlow; } 现在我正在从中检索值 private WorkFlow GetEntityFromControls() { WorkFlow workFlow = (ViewState["WorkFlow"] as WorkFlow) ?? new WorkFlow(); //workFlow is null } 所以现在这个函数workFlow是null。我想问,为什么当我在页面中设置viewstate时为空。 解决方法
Scherand在这里非常正确。我想补充一下他带给桌子的东西。
来自System.Web.UI.Control的每个控件都具有ViewState属性。该酒店是一个StateBag集合。 Control的每个实例都有自己的StateBag for ViewState,所以Scherand提到,ViewState是控件唯一的。当页面呈现时,页面的整个控制树被迭代,所有ViewState集合都被合并到一个树状结构中,并且该最终结构被序列化为字符串并呈现给页面。 因为ViewState属性被标记为受保护,所以您无法使用用户控件访问该页面的ViewState,而不使用反射。 但是,诚然,您应该放弃使用ViewState作为数据存储介质。以下是一些原因: > ViewState被渲染并输出到客户端浏览器。维护收集中的数据对象会使您的页面的输出膨胀。 真的好像所有你想要做的是在你的页面和用户控件之间共享数据。在控件之间共享数据的最佳方法是使用“Items”集合(它是HttpContext类的一个属性)。该集合是一个哈希表,可以从您的页面和用户控件访问,如下所示: Context.Items["Workflow"] = workflowInstance; 使用这种技术的最好的部分是它不会招致任何额外的开销或膨胀的页面输出。 Items集合存在于单个HTTP请求的上下文中。这意味着当您的请求完成并且您的Page的输出已经呈现给客户端浏览器时,Items集合将从服务器内存中清除。它是ASP.NET中临时数据存储的理想媒介。 现在,如果您希望数据对象可以访问不仅仅是当前的请求,那么最好在Session中存储对象。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 这个ASP.NET功能在哪里记录? <%= string format,params o
- asp.net-web-api – 在Webapi中使用Url.Link与属性路由2
- asp.net-mvc-3 – 模型绑定器和隐藏字段
- asp.net – System.Web.Security.MembershipProvider在哪里
- ASP.NET MVC中的基本认证5
- ASP.NET Webforms验证框架的建议
- ASP.NET Web窗体DropDownList具有SelectedValue,因为它不存
- asp.net-mvc-3 – 如何将ObjectResult转换为IQueryable?
- asp.net-mvc-3 – 似乎无法有条件地使用Razor的foreach和if
- ASP.NET -- WebForm -- ScriptManager 类