【问题标题】:ASP.NET - losing selection of dropdownlist populated via javascriptASP.NET - 丢失通过 javascript 填充的下拉列表的选择
【发布时间】:2010-09-29 19:09:09
【问题描述】:

我在一个页面上有两个 ASP.NET 下拉列表控件。第一个回调服务器并获得一个数组,该数组返回给客户端并用于通过 javascript 填充第二个下拉列表。 但是,如果我在第二个(和新填充的)下拉列表中进行选择,然后进行回发,则第二个下拉列表的选择和内容将丢失。这是一个问题,因为我需要获取选定的值并在回发后保留列表的内容。

我该如何解决这个问题?我认为这是在回发之前的某个时间点更新视图状态的问题?


我正在填充的控件是 ASP.NET 下拉列表。这是我用来填充它们的 javascript。

正在使用的代码如下(为简洁起见略有删减):

我正在填充的 ASP.NET 控件:

获取逗号分隔值列表的回调代码:

public void RaiseCallbackEvent(string eventArgument)
    {
    return "1, 2, 3";
}

Javascript 填充代码:

function ReceiveServerData(retValue)
{ 
    var statesArray = retValue.split(',');
    var statesList = document.getElementById('{0}');

    if (statesArray.length > 0 && statesList != null)
        {
                for (var j = 0; j < statesArray.length; j++)
            {
                    var newOption = document.createElement('OPTION');
                        statesList.options.add(newOption);
            newOption.value = statesArray[j].toString().trim();
                    newOption.innerText = statesArray[j];
                }
    }
}

【问题讨论】:

  • 你能添加你的 aspx 页面、javascript 代码和代码隐藏吗(在 3 个单独的代码块中会很好):)

标签: asp.net javascript drop-down-menu


【解决方案1】:

您说您没有正确的 ViewState 是正确的,这就是当您将数据发布回服务器时未填充值的原因。

我会强烈建议您迁移到在 ASP.NET AJAX 控件工具包中使用 Cascading Drop Down(它同时具有 .NET 2.0 和 .NET 3.5 版本),因为它可以满足您的需求之后,它确实通过回发维护。

您的另一种选择是在 JavaScript 填充的下拉列表中添加一个 onchange 事件,然后您在其中填充一个隐藏字段,因为该字段将被发送回服务器并保留提交的值在发布的数据中,类似于:

$addHandler('change', $get('dynamicDDL'), function () { $get('hiddenField').value = this.options[this.selectedIndex].value; });

对于演示,我使用 MS AJAX 简写来添加事件等。有关我使用的方法的更多信息可以在这里找到:http://msdn.microsoft.com/en-au/library/bb397536.aspx

【讨论】:

    【解决方案2】:

    Request.Form[Control.UniqueID] 为您提供选定的值。

    【讨论】:

      【解决方案3】:

      只需使用 response.forms 集合即可获取所选值。

      【讨论】:

      • 谢谢!但是,我还需要能够保留帖子之间下拉列表的值。
      【解决方案4】:

      我猜“你不是用 asp.net 的方式做事”。

      在我看来,如果您的 javascript 修改不是原生 asp.net,那么您填充的元素就不是 asp.net 控件,因此您会在回发中丢失它们。 asp.net 确实需要它的模型和实际页面之间的紧密绑定。

      不过可能有点离谱-如果您可以发布一些代码会有所帮助。 (JS和代码隐藏方法)

      编辑新信息:

      是的 - 所以你基本上是通过基于 AJAX 化的返回字符串(?)的 JS 单独创建一个完全正常的 html 元素负载,asp.net 代码隐藏 没有任何概念。如果没有自己设置测试应用程序,我不能 100% 确定这是问题所在,但这听起来是对的。

      然后检查 Request.Forms - 正如其他人所建议的那样 - 将是现在解决此问题的最简单方法,但您应该记住,asp.net 变得越来越痛苦,您越远离做事它希望你的方式。我认为值得研究如何从代码隐藏中添加这些新选项。

      【讨论】:

      • asp.net 太多了??那可能吗? ;)
      • asp.net 被认为是有害的? :P
      猜你喜欢
      • 2013-07-29
      • 1970-01-01
      • 2015-07-26
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多