2009-01-06 15 views
7

Tengo dos controles de lista desplegable de ASP.NET en una página. La primera llama al servidor y obtiene una matriz que se devuelve al cliente y se utiliza para llenar la segunda lista desplegable a través de javascript. Sin embargo, si hago una selección en la segunda lista desplegable (y recién poblada) y luego hago una devolución, la selección y el contenido de la segunda lista desplegable se pierden. Este es un problema ya que necesito obtener el valor seleccionado y tener los contenidos de la lista retenidos después de la devolución.ASP.NET - perder la selección de la lista desplegable poblada mediante javascript

¿Cómo puedo solucionar esto? Supongo que es una cuestión de actualizar ViewState en algún momento antes de la devolución de datos?


Los controles que estoy rellenando son listas desplegables de ASP.NET. Aquí está el javascript que estoy usando para poblarlos.

Código que se utiliza es la siguiente (ligeramente cortado por razones de brevedad):

control de ASP.NET que estoy poblando:

< asp: DropDownList ID runat = "ddlStateCounty" = server " "OnSelectedIndexChanged =" ddlStateCounty_OnSelectedIndexChanged" AutoPostBack = "true"/ >

llamada de vuelta código que obtiene por comas lista de valores separados:

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

código Javascript población:

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

¿Puede agregar su página aspx, código de JavaScript y codebehind (en 3 bloques de código separados sería bueno) :) –

Respuesta

1

supongo que "no se está haciendo las cosas como asp.net".

Me parece probable que si las modificaciones de su javascript no son asp.net nativas, entonces los elementos que está poblando no son controles asp.net por lo que los está perdiendo en la devolución de datos. asp.net realmente exige un vínculo estrecho entre su modelo y la página real.

Sin embargo, podría estar fuera de contexto, sería útil si pudiera publicar algún código. (JS y el método de código subyacente)

edición de nueva información:

derecha - por lo que está básicamente la creación de una carga de elementos perfectamente normales HTML a través de JS solo en base a una cadena de retorno Ajaxified (?) , que el código asp.net tiene no hay concepto de. No estoy 100% seguro de que este sea el problema sin configurar una aplicación de prueba, pero suena bien.

Inspecting Request.Forms entonces, como otros han sugerido, va a ser la forma más sencilla de solucionar esto ahora, pero debe tener en cuenta que asp.net se vuelve más y más doloroso cuanto más se aleja de hacer las cosas la forma en que te quiere Creo que valdría la pena descubrir cómo agregar estas nuevas opciones desde el código subyacente.

+0

eso es demasiadas instancias de "asp.net" en una publicación – annakata

+0

demasiado asp.net ?? ¿es eso posible? ;) – Blounty

+0

asp.net considerado dañino? : P – annakata

1

simplemente use la colección response.forms para obtener el valor seleccionado.

+0

¡Gracias! Sin embargo, también necesito poder retener los valores de la lista desplegable entre las publicaciones. – Peanut

6

Tiene razón al afirmar que no tiene el ViewState correcto, por lo que los valores no se rellenan cuando publica los datos en el servidor.

me habría fuertemente recomendamos que migre a la utilización de la Cascading Drop Down dentro del ASP.NET AJAX Control Toolkit (tiene ambos .NET 2.0 y .NET 3.5 lanzamientos), como lo hace lo que está después y se hace mantener a través de la devolución de datos.

Su otra opción sería tener un evento onchange en la lista desplegable llena de JavaScript en la que a continuación completa un campo oculto, ya que se publicará en el servidor y el valor del envío se mantendrá dentro de los datos publicados, algo así como:

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

para la demo he utilizado la taquigrafía MS AJAX para añadir eventos, etc. Más información sobre los métodos que he utilizado se puede encontrar aquí: http://msdn.microsoft.com/en-au/library/bb397536.aspx

3

Request.Form [Control.UniqueID] le brinda la selección valor ed.

Cuestiones relacionadas