用ASP.NET AJAX填充列表后更新viewstate
时间:2020-03-06 14:57:34 来源:igfitidea点击:
我有一个下拉列表,该列表通过使用ASP> .NET AJAX的Web服务进行填充。在javascript中方法的成功回调中,我通过循环填充了下拉列表:
function populateDropDown(dropdownId, list, enable, showCount) { var dropdown = $get(dropdownId); dropdown.options.length = 1; for (var i = 0; i < list.length; i++) { var opt = document.createElement("option"); if (showCount) { opt.text = list[i].Name + ' (' + list[i].ChildCount + ')'; } else { opt.text = list[i].Name; } opt.value = list[i].Name; dropdown.options.add(opt); } dropdown.disabled = !enable; }
但是,当我提交该控件处于打开状态的表单时,该控件的列表在回发时始终为空。如何获取填充的列表数据以保留回发?
编辑:也许我要倒退。一个更好的问题可能是,由于必须经历整个页面生命周期,如何在不使用updatepanel的情况下从Web服务填充下拉列表?
解决方案
为此,我们需要使用Request.Form,我们不能从客户端即时加密ViewState,否则将破坏它的整个要点:)。
编辑:响应编辑:)页面生命周期是允许我们首先使用ViewState持久性的东西。控制树在那里处理,好吧,它周围没有任何东西。
Request.Form是一种完美可行的方法,它可以告诉我们选择的值。如果我们想知道所有值,则可以对隐藏的控件进行某种类型的序列化。
丑陋的,是的,但这就是为什么上帝(有人称他为ScottGu)发明了ASP.NET MVC :)的原因。
尽管我不太确定它是如何做到的,但是AJAX控件工具包中的CascadingDropDown确实支持此功能。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
这是执行此操作的行:
AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'set_ClientState', [ this._selectedValue+':::'+text ]);
但是最简单的想法是将所选值放入回发事件的隐藏输入字段中。