2009-01-06 217 views
7

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

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


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

使用代码如下(略微削减为了简洁):

ASP.NET控制我填充:

< ASP:DropDownList的ID = “ddlStateCounty” RUNAT =“服务器“OnSelectedIndexChanged =” ddlStateCounty_OnSelectedIndexChanged”的AutoPostBack = “真”/ >,其获得逗号分隔值的列表

回拨代码:

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]; 
       } 
    } 
} 
+0

你可以添加你的aspx页面,JavaScript代码和代码隐藏(在3个独立的代码块会很好):) – 2009-01-06 12:10:47

回答

1

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

对我来说,如果你的javascript修改不是本地的asp.net,那么你填充的元素不是asp.net控件,所以你在回发中丢失它们。 asp.net确实需要模型和实际页面之间的紧密结合。

虽然可以离开基地 - 如果你可以发布一些代码会有所帮助。 (JS和代码隐藏方法)

编辑新信息:

右键 - 所以你基本上是通过JS创建完全正常的HTML元素的负荷仅基于一个支持Ajax返回字符串(?) ,其中asp.net代码隐藏没有任何概念。我不是100%确定这是没有自己设置测试应用程序的问题,但它听起来是正确的。

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

+0

这是太多的“asp.net”在一个职位的实例 – annakata 2009-01-06 12:08:04

+0

太多的asp.net?那可能吗? ;) – Blounty 2009-01-06 12:13:28

1

只是使用response.forms集合来获取选定的值。

6

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

我会强烈建议您迁移到使用Cascading Drop Down的ASP.NET AJAX控件工具包中(它既有.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

3

Request.Form [Control.UniqueID]为您提供选择ed值。

相关问题