Per generare un elenco a discesa sono necessarie 2 proprietà sul modello di visualizzazione: una proprietà scalare per associare il valore selezionato a e una proprietà di raccolta che conterrà gli elementi da mostrare nel menu a discesa.
Così si potrebbe definire un modello di vista:
public class DropDownListViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
e quindi del modello di vista principale avere una proprietà di questo tipo:
public DropDownListViewModel Foo { get; set; }
Ora si potrebbe avere un editor di modelli su misura per questo tipo (~/Views/Shared/EditorTemplates/DropDownListViewModel.ascx
):
<%@ Control
Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DropDownListViewModel>"
%>
<%= Html.DropDownListFor(x => x.SelectedValue, Model.Items) %>
e poi nella visualizzazione principale:
<%= Html.EditorFor(x => x.Foo) %>
Ora tutto quello che resta è quello di avere il rendering azione di controllo della vista principale per riempire la proprietà Foo
con i corrispondenti valori. Il potrebbe essere hardcoded, provenire da un repository o qualsiasi altra cosa. Non importa.
D'altra parte se si conoscevano i valori di anticipo si potevano hardcode in Editor modello (~/Views/Shared/EditorTemplates/YesNoDropDown.ascx
):
<%= Html.DropDownList(
"",
new SelectList(
new[]
{
new { Value = "true", Text = "Yes" },
new { Value = "false", Text = "No" },
},
"Value",
"Text",
Model
)
) %>
e poi:
<%= Html.EditorFor(x => x.IsActive, "YesNoDropDown") %>
o decorando la proprietà IsActive sul tuo punto di vista modello:
[UIHint("YesNoDropDown")]
public bool IsActive { get; set; }
e quindi:
<%= Html.EditorFor(x => x.IsActive) %>
Grazie per la soluzione. Sto ottenendo un'eccezione prevista Identifier nella pagina .ascx editor di modelli ... nei pressi di nuovo [] – ZVenue
@ZVenue, ancora problemi con questo? –
Niente più problemi .. grazie per il vostro aiuto .. La soluzione Modificato qui .. http://stackoverflow.com/questions/9568111/problems-converting-editorfor-to-dropdownlist – ZVenue