我在页面上有两个ASP.NET下拉列表控件.第一个回调到服务器并获得一个数组,该数组返回给客户端并用于通过javascript填充第二个下拉列表.但是,如果我在第二个(并且新填充的)下拉列表中进行选择,然后进行回发,则第二个下拉列表的选择和内容将丢失.这是一个问题,因为我需要获取所选值并在回发后保留列表的内容.
我该如何解决?我认为这是在回发之前的某个时刻更新viewstate的问题?
我填充的控件是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]; } } }
Aaron Powell.. 6
您说明没有ViewState权限是正确的,这就是为什么在将数据发回服务器时不会填充值的原因.
我会强烈建议您迁移到使用级联下拉的ASP.NET AJAX控件工具包中(它既有.NET 2.0和.NET 3.5版本),因为它确实你是什么之后,它也通过回传维护.
您的另一个选择是onchange
在JavaScript填充的下拉列表中有一个事件,然后在其中填充隐藏字段,因为它将被发布回服务器,并且提交的值将保留在发布的数据中,喜欢:
$addHandler('change', $get('dynamicDDL'), function () { $get('hiddenField').value = this.options[this.selectedIndex].value; });
对于演示,我使用MS AJAX简写添加事件等.有关我使用的方法的更多信息可以在这里找到:http://msdn.microsoft.com/en-au/library/bb397536.aspx
您说明没有ViewState权限是正确的,这就是为什么在将数据发回服务器时不会填充值的原因.
我会强烈建议您迁移到使用级联下拉的ASP.NET AJAX控件工具包中(它既有.NET 2.0和.NET 3.5版本),因为它确实你是什么之后,它也通过回传维护.
您的另一个选择是onchange
在JavaScript填充的下拉列表中有一个事件,然后在其中填充隐藏字段,因为它将被发布回服务器,并且提交的值将保留在发布的数据中,喜欢:
$addHandler('change', $get('dynamicDDL'), function () { $get('hiddenField').value = this.options[this.selectedIndex].value; });
对于演示,我使用MS AJAX简写添加事件等.有关我使用的方法的更多信息可以在这里找到:http://msdn.microsoft.com/en-au/library/bb397536.aspx