selectlistitem net mvc ejemplos dropdownlist drop down asp asp.net-mvc drop-down-menu html-helper editorfor

asp.net mvc - net - Conversión de HTML.EditorFor en un menú desplegable(html.dropdownfor?)



mvc dropdownlist selected value viewbag (1)

Actualmente estoy usando un control Html.EditorFor en una página de vista ''Crear'' predeterminada como esta.

<%: Html.EditorFor(model => model.IsActive) %>

Me gustaría convertir esto a un menú desplegable con valores y seguir vinculado al modelo en la vista. Mi pregunta es doble

  1. Si solo se necesitan 2/3 valores en el menú desplegable ... ¿Existe una manera rápida de completar explícitamente 2 o 3 valores?

  2. Si la lista es grande y debe provenir de una consulta sql, ¿cómo hacer esto?

Gracias de antemano por la ayuda.


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 para mostrar en el menú desplegable.

Entonces podrías definir un modelo de vista:

public class DropDownListViewModel { public string SelectedValue { get; set; } public IEnumerable<SelectListItem> Items { get; set; } }

y luego en su modelo de vista principal tiene una propiedad de este tipo:

public DropDownListViewModel Foo { get; set; }

Ahora podría tener una plantilla de editor personalizada 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 tu vista principal:

<%= Html.EditorFor(x => x.Foo) %>

Ahora todo lo que queda es tener su acción de controlador renderizando 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ía los valores de antemano, podría codificarlos en la plantilla del editor ( ~/Views/Shared/EditorTemplates/YesNoDropDown.ascx ):

<%= Html.DropDownList( "", new SelectList( new[] { new { Value = "true", Text = "Yes" }, new { Value = "false", Text = "No" }, }, "Value", "Text", Model ) ) %>

y entonces:

<%= Html.EditorFor(x => x.IsActive, "YesNoDropDown") %>

o decorando la propiedad IsActive en su modelo de vista:

[UIHint("YesNoDropDown")] public bool IsActive { get; set; }

y entonces:

<%= Html.EditorFor(x => x.IsActive) %>