menus - ASP.NET-Perdiendo selección de lista desplegable poblada vía javascript
menus en javascript ejemplos (4)
Supongo que "no estás haciendo las cosas a la manera de asp.net".
Me parece probable que si las modificaciones de su javascript no son asp.net nativas, 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 la base, ayudaría si pudieras publicar algún código. (el JS y el método de código subyacente)
editar por nueva información:
Correcto, así que básicamente estás creando una carga de elementos html perfectamente normales a través de JS solo en base a una cadena de retorno AJAXified (?), Que el código asp.net no tiene ningún concepto de ningún tipo . No estoy 100% seguro de que este es el problema sin configurar una aplicación de prueba, pero suena bien.
Inspeccionar Request.Forms entonces, como otros han sugerido, va a ser la forma más sencilla de solucionar esto ahora, pero debes tener en cuenta que asp.net se vuelve más y más doloroso cuanto más te alejas de hacer las cosas como quieres usted a. Creo que valdría la pena descubrir cómo agregar estas nuevas opciones desde el código subyacente.
Tengo dos controles de listas desplegables 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 de datos, 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.
¿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 poblando son listas desplegables de ASP.NET. Aquí está el javascript que estoy usando para poblarlos.
El código que se utiliza es el siguiente (ligeramente reducido para abreviar):
Control de ASP.NET que estoy poblando:
<asp: DropDownList ID = "ddlStateCounty" runat = "servidor" OnSelectedIndexChanged = "ddlStateCounty_OnSelectedIndexChanged" AutoPostBack = "true" />
Código de devolución de llamada que obtiene una lista de valores separados por comas:
public void RaiseCallbackEvent(string eventArgument)
{
return "1, 2, 3";
}
Código de población de 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];
}
}
}
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.
Recomiendo encarecidamente que migre a utilizar el menú desplegable en cascada dentro del kit de herramientas de control ASP.NET AJAX (tiene lanzamientos .NET 2.0 y .NET 3.5), ya que hace lo que busca y lo mantiene 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 luego rellene un campo oculto, ya que se publicará en el servidor y el valor del envío se mantendrá dentro de los datos publicados. algo como:
$addHandler(''change'', $get(''dynamicDDL''), function () { $get(''hiddenField'').value = this.options[this.selectedIndex].value; });
Para la demostración utilicé la abreviatura MS AJAX para agregar eventos, etc. Se puede encontrar más información sobre los métodos que utilicé aquí: http://msdn.microsoft.com/en-au/library/bb397536.aspx
solo use la colección response.forms para obtener el valor seleccionado.
Request.Form [Control.UniqueID] le proporciona el valor seleccionado.