2009-07-27 32 views
5

Estoy seguro de que esta es una operación común, pero me está costando trabajo encontrar una solución. Es el problema de dos <select> en una página web donde uno depende del otro para su lista de valores posibles.Lista de selección vacía en ASP.NET MVC

Tengo una lista desplegable que contiene códigos de subestación en una página web cuya lista de valores posibles depende de la selección en otra lista desplegable en la página que contiene códigos de estado. En mi controlador, recupero la lista de posibles códigos de estado de la base de datos y pongo los valores en una lista de selección que usa DropDownList HTMLHelper para crear mi lista de selección en la vista. Recupero un registro de modelo que contiene un código de estado y uso ese valor de código de estado para buscar los valores posibles de subestado en la base de datos, y coloco esa lista en otra lista de selección para el segundo menú desplegable. La página realiza una llamada ajax al servidor para volver a llenar el menú desplegable del subsuelo con una nueva lista de valores posibles cuando el usuario cambia la selección en el menú desplegable de estado.

Un código de estado vacío realmente no es un valor válido, pero esta es una aplicación de control de calidad que se utiliza para corregir dichos problemas. Mi problema es que el código de estado actual en el registro modelo puede veces estar vacío y, por lo tanto, mi lista de valores de subestación para el segundo menú desplegable estará vacía. Desafortunadamente, parece que no hay forma de crear una Lista de selección vacía para pasar a DropDownList HTMLHelper, pero mi lista desplegable se debe crear cuando la página se carga para admitir mi solución de Ajax.

¿Alguien ha ideado una manera eficiente y super resbaladiza para manejar tales escenarios? ¿O necesito recurrir a algo feo como comprobar en mi vista si el subtema SelectList es nulo, y si está utilizando HTML diferente para generar el menú desplegable? En mi mente enfermiza, ser capaz de generar una lista de selección vacía para entregar a HTMLHelper sería una solución razonable. Me gustaría recibir cualquier idea.

Respuesta

3

Es posible pasar una lista vacía a DropDownList.

En su controlador, debe tener algo como:

 
var status_code_id = mymodel.status_code_id; 
var substatus_code_id = mymodel.substatus_code_id; 

ViewData["status_code_id"] = new SelectList(
    StatusCodes.FindAll(), "id", "code", status_code_id); 

ViewData["substatus_code_id"] = new SelectList(
    SubstatusCodes.FindAllForStatus(status_code_id), "id", "code", substatus_code_id); 

... donde FindAllForStatus contiene el mismo código que está utilizando en su llamada AJAX para rellenar la lista desplegable de subestado. FindAllForStatus debe incluir un código de estado vacío y devolver una lista vacía.

En su opinión, debe tener algo como:

 
<%= Html.DropDownList("status_code_id", "--not selected--")%> 
<%= Html.DropDownList("substatus_code_id", "--not selected--")%> 
-4

Devuelve solo 1 elemento ficticio, deja que javascript verifique este ítem y luego deshabilita la segunda lista desplegable.

27

Puede utilizar Enumerable.Empty()

@Html.DropDownList("dropdown-name", Enumerable.Empty<SelectListItem>()) 
+1

también trabajó con MultiSelectList añadiendo Enumerable.Empty () como el param – garyh

Cuestiones relacionadas