我有一个页面,在页面的一个特殊区域(比如appArea)中有一个datagrid和一个与其他内容相关的下拉列表,它在desktopArea div中加载。
下拉列表应该在处理了正确运行的SelectedIndexChanged时重新加载数据网格。
在达到一些调整大小阈值后,我将这个appArea移动到另一个位置(比如mobileArea div,因为我必须使用事件绑定显示相同的区域等等),并使用下面的代码片段。
var wrapper = document.createElement('div');
$(wrapper).append($appArea.detach());
$(wrapper).find('script').remove();
$("wikiAppArea").parent().empty().append($(wrapper).children().contents());
将此appArea移动到mobileArea div后,如果我更改下拉列值,则会调用SelectedIndexChanged回发事件并绑定datagrid,但数据网格会丢失。
在页面上执行跟踪显示,在下拉单击时数据网格丢失的情况下,DataGrid根本不调用LoadViewState方法(正在调用SaveViewState和TrackViewState)。
从最初的调查开始,看起来控件层次结构正在发生变化,这导致了一些问题,即在回发期间不会调用DataGrid的LoadViewState。
在这种情况下,有没有办法强制调用LoadViewState。
答案 0 :(得分:1)
原来应用ViewStateModeById属性修复此问题。
ViewStateModeByIdAttribute类用于指定需要按ID加载视图状态的控件。默认的视图状态加载行为是ASP.NET通过页面控制树中的索引加载控件的视图状态信息。按ID加载视图状态信息会产生性能成本,因为在加载视图状态信息之前必须专门搜索页面控制树。
ViewStateModeByIdAttribute类不适用于保存控件的视图状态信息。 ViewStateModeByIdAttribute类元数据属性仅对类声明有效。