Pea*_*nut 7 javascript asp.net drop-down-menu
我在页面上有两个ASP.NET下拉列表控件.第一个回调到服务器并获得一个数组,该数组返回给客户端并用于通过javascript填充第二个下拉列表.但是,如果我在第二个(并且新填充的)下拉列表中进行选择,然后进行回发,则第二个下拉列表的选择和内容将丢失.这是一个问题,因为我需要获取所选值并在回发后保留列表的内容.
我该如何解决?我认为这是在回发之前的某个时刻更新viewstate的问题?
我填充的控件是ASP.NET下拉列表.这是我用来填充它们的javascript.
使用的代码如下(为简洁起见,略微减少):
ASP.NET控件我正在填充:
<asp:DropDownList ID ="ddlStateCounty"runat ="server"OnSelectedIndexChanged ="ddlStateCounty_OnSelectedIndexChanged"AutoPostBack ="true"/>
回调获取逗号分隔值列表的代码:
public void RaiseCallbackEvent(string eventArgument)
{
return "1, 2, 3";
}
Run Code Online (Sandbox Code Playgroud)
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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
您说明没有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; });
Run Code Online (Sandbox Code Playgroud)
对于演示,我使用MS AJAX简写添加事件等.有关我使用的方法的更多信息可以在这里找到:http://msdn.microsoft.com/en-au/library/bb397536.aspx
我猜测“你没有以 ASP.NET 的方式做事”。
在我看来,如果您的 javascript 修改不是本机 asp.net,那么您填充的元素不是 asp.net 控件,因此您会在回发中丢失它们。asp.net 确实需要其模型和实际页面之间的紧密绑定。
不过,可能有点偏离基础 - 如果您可以发布一些代码,将会有所帮助。(JS和代码隐藏方法)
编辑新信息:
是的 - 所以你基本上是通过 JS 单独基于 AJAX 化的返回字符串(?)创建了一个完全正常的 html 元素的负载,而 asp.net 代码隐藏没有任何概念。在没有自己设置测试应用程序的情况下,我不能 100% 确定这是问题所在,但这听起来是正确的。
然后检查 Request.Forms - 正如其他人所建议的 - 将是现在解决此问题的最简单方法,但您应该记住,随着您偏离 asp.net 想要的方式做事,asp.net 会变得越来越痛苦你到。我认为值得研究如何从代码隐藏中添加这些新选项。
| 归档时间: |
|
| 查看次数: |
9816 次 |
| 最近记录: |