ASP.NET-丢失通过javascript填充的dropdownlist的选择

ASP.NET-丢失通过javascript填充的dropdownlist的选择,asp.net,javascript,drop-down-menu,Asp.net,Javascript,Drop Down Menu,我在一个页面上有两个ASP.NET dropdownlist控件。第一个调用返回到服务器并获得一个数组,该数组返回到客户机并用于通过javascript填充第二个dropdownlist。 但是,如果我在第二个(以及新填充的)dropdownlist中进行选择,然后进行回发,则第二个dropdownlist的选择和内容将丢失。这是一个问题,因为我需要获得所选的值,并在回发后保留列表的内容 我该如何解决这个问题?我想这是在回发之前的某个时间点更新viewstate的问题 我填充的控件是ASP.N

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

我该如何解决这个问题?我想这是在回发之前的某个时间点更新viewstate的问题


我填充的控件是ASP.NET DropDownList。下面是我用来填充它们的javascript代码

使用的代码如下所示(为简洁起见略为减少):

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

public void RaiseCallbackEvent(string eventArgument)
    {
    return "1, 2, 3";
}
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];
                }
    }
}

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

public void RaiseCallbackEvent(string eventArgument)
    {
    return "1, 2, 3";
}
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];
                }
    }
}
Javascript填充代码:

public void RaiseCallbackEvent(string eventArgument)
    {
    return "1, 2, 3";
}
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];
                }
    }
}
函数ReceiveServerData(retValue)
{ 
var statesArray=retValue.split(',');
var statesList=document.getElementById(“{0}”);
如果(statesArray.length>0&&statesList!=null)
{
对于(var j=0;j
我猜“你不是在用asp.net的方式做事”

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

但可能有点离谱-如果您能发布一些代码,这会有所帮助。(JS和codebehind方法)

编辑新信息:

右-因此,您基本上是在基于AJAXified返回字符串(?)的基础上通过JS单独创建一个完全正常的html元素负载,asp.net codebehind对此没有任何概念。如果不亲自设置一个测试应用程序,我不能100%确定这是个问题,但这听起来是对的


正如其他人所建议的那样,检查Request.Forms将是目前解决此问题的最简单的方法,但是您应该记住,asp.net越是偏离它希望您做的事情,它就会变得越来越痛苦。我认为有必要研究如何从codebehind添加这些新选项。

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

您说的ViewState不正确是正确的,这就是为什么在将数据发布回服务器时没有填充值的原因

我强烈建议您迁移到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速记添加事件等。有关我使用的方法的更多信息,请参见此处:

请求。表单[Control.UniqueID]为您提供所选值。

您是否可以添加您的aspx页面、javascript代码和codebehind(在3个单独的代码块中即可):)太多asp.net??这可能吗?;)asp.net被认为是有害的?:汉克斯!但是,我还需要能够在帖子之间保留dropdownlist的值。