Para generar una lista desplegable, necesita 2 propiedades en su modelo de vista: una propiedad escalar para vincular el valor seleccionado y una propiedad de colección que contendrá los elementos que se mostrarán en el menú desplegable.
Así se podría definir una vista de modelo:
public class DropDownListViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
y luego el modelo de la vista principal tiene una propiedad de este tipo:
public DropDownListViewModel Foo { get; set; }
Ahora usted podría tener un editor de plantillas a medida para este tipo (~/Views/Shared/EditorTemplates/DropDownListViewModel.ascx
):
<%@ Control
Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DropDownListViewModel>"
%>
<%= Html.DropDownListFor(x => x.SelectedValue, Model.Items) %>
y luego en su vista principal:
<%= Html.EditorFor(x => x.Foo) %>
Ahora todo lo que queda es que su acción del controlador haciendo que la vista principal para llenar la propiedad Foo
con los valores correspondientes. El podría estar codificado, venir de un repositorio o lo que sea. Realmente no importa.
Por otro lado si conocían los valores de anticipación se podría codificar en el editor de plantillas (~/Views/Shared/EditorTemplates/YesNoDropDown.ascx
):
<%= Html.DropDownList(
"",
new SelectList(
new[]
{
new { Value = "true", Text = "Yes" },
new { Value = "false", Text = "No" },
},
"Value",
"Text",
Model
)
) %>
y luego:
<%= Html.EditorFor(x => x.IsActive, "YesNoDropDown") %>
o mediante la decoración de la propiedad IsActive en su modelo de vista:
[UIHint("YesNoDropDown")]
public bool IsActive { get; set; }
y luego:
<%= Html.EditorFor(x => x.IsActive) %>
Gracias por la solución. Obtengo una excepción esperada Identificador en la plantilla del editor .ascx página ... cerca de nuevo [] – ZVenue
@ZVenue, ¿todavía tiene problemas con este? –
No más problemas ... gracias por su ayuda ... Su solución modificada aquí ... http://stackoverflow.com/questions/9568111/problems-converting-editorfor-to-dropdownlist – ZVenue