asp.net – 当你不能使用ViewState时你会怎么做?
|
我有一个相当复杂的页面,可以在转发器内动态构建用户控件.在初始化ViewState之前,必须在Init页面事件期间绑定此转发器,否则动态创建的用户控件将不会保留其状态. 这会创建一个有趣的Catch-22,因为绑定转发器的对象需要在初始页面加载时创建,然后保留在内存中,直到用户选择离开或保存. 因为我不能使用ViewState来存储这个对象,但是在Init期间它可用,我被迫将它存储在Session中. 这也有问题,因为我必须在非回发期间显式地使会话值为空,以便模拟ViewState的工作方式. 在这种情况下,必须有一种更好的状态管理方法.有任何想法吗? 编辑:关于使用LoadViewState的一些好建议,但是当我这样做时,我仍然遇到状态未被恢复的问题. 这有点是页面结构 页面 – > UserControl – >中继器 – > N量的UserControls动态创建. 我将重写的LoadViewState放在父UserControl中,因为它被设计为完全封装并独立于它所在的页面.我想知道问题出在哪里. 解决方法页面上的LoadViewState方法绝对是答案.这是一般的想法:protected override void LoadViewState( object savedState ) {
var savedStateArray = (object[])savedState;
// Get repeaterData from view state before the normal view state restoration occurs.
repeaterData = savedStateArray[ 0 ];
// Bind your repeater control to repeaterData here.
// Instruct ASP.NET to perform the normal restoration of view state.
// This will restore state to your dynamically created controls.
base.LoadViewState( savedStateArray[ 1 ] );
}
SaveViewState需要创建我们上面使用的savedState数组: protected override object SaveViewState() {
var stateToSave = new List<object> { repeaterData,base.SaveViewState() };
return stateToSave.ToArray();
}
不要忘记使用以下代码绑定Init或Load中的转发器: if( !IsPostBack ) {
// Bind your repeater here.
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – IIS 7.5和ASP .NET 2.0
- 从ASP.NET应用程序删除目录返回到新会话
- 我应该如何组织我的ASP.Net主题和常见的CSS文件
- asp.net-mvc – ASP.NET MVC – 向ActionLinks添加querystr
- ASP.NET – 从内容页面访问主页面元素
- 设置ASP.NET(Visual Studio)服务器配置的默认页面
- asp.net – 如何使usercontrol可用于多个项目?
- asp.net – 使用codebehind显示隐藏div
- Forms身份验证应用程序中的ASP.NET Web服务
- asp.net-mvc – 无法在Web服务器上启动调试. Web服务器找不
- 如何使ASP.NET MVC应用程序多语言?
- .net – 如何在ASP成员资格中使用LogOut
- ASP.NET中没有会话状态的用户身份验证
- asp.net-mvc – ASP.NET Web-API不序列化readonl
- asp.net – DataBinding:’System.Data.DataRow
- asp.net-mvc – ASP MVC3 – 如何从数据库加载页
- 为什么在ASP.Net中向StatusDescription添加换行符
- ASP.NET MVC图像上传存储位置(db vs filesystem)
- asp.net-mvc-5 – aspnet身份避免同时登录同一帐
- asp.net-mvc – 将DropDownListFor绑定到字典
