【问题标题】:Update viewstate after populating a list with ASP.NET AJAX使用 ASP.NET AJAX 填充列表后更新视图状态
【发布时间】:2008-10-01 02:51:47
【问题描述】:

我有一个使用 ASP>NET AJAX 通过网络服务填充的下拉列表。在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;    
}

但是,当我提交该控件所在的表单时,该控件的列表在回发时始终为空。如何让填充的列表数据在回发中保持不变?

编辑:也许我是在倒退。一个更好的问题可能是,我如何从 Web 服务填充下拉列表,而不必使用更新面板,因为它必须运行整个页面生命周期?

【问题讨论】:

    标签: .net asp.net javascript asp.net-ajax


    【解决方案1】:

    您需要为此使用 Request.Form - 您不能从客户端即时加密 ViewState - 它会破坏它的全部意义 :)。

    编辑:响应您的编辑 :) 页面生命周期是允许您首先使用 ViewState 持久性的东西。控制树是在那里处理的,而且,没有办法绕过它。

    Request.Form 是一种非常可行的方法——它会告诉你选择的价值。如果你想知道所有的值,你可以对隐藏控件进行某种类型的序列化。

    丑陋,是的,但这就是为什么上帝(有人称他为 ScottGu)发明了 ASP.NET MVC :)。

    【讨论】:

    • 是的,我希望我可以使用 MVC!我已经使用了隐藏字段选项,使用 Page.ClientScript.RegisterHiddenField 进行设置。我创建了一个继承自 Dropdownlist 的类,它覆盖 SelectedValue 以从 Request.Form 加载
    【解决方案2】:

    虽然我不太确定它是如何做到的,但 AJAX 控件工具包中的 CascadingDropDown 确实支持这一点。

    这似乎是这样做的:

    AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'set_ClientState', [ this._selectedValue+':::'+text ]);
    

    但最简单的想法是将所选值放入回发事件的隐藏输入字段中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      相关资源
      最近更新 更多