Converting HTML.EditorFor into a drop down (html.dropdownfor?)

前端 未结 1 1993
孤城傲影
孤城傲影 2020-12-03 03:47

Currently I am using a Html.EditorFor control in a default \'Create\' View page like this.

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


        
相关标签:
1条回答
  • 2020-12-03 04:15

    In order to generate a dropdownlist you need 2 properties on your view model: a scalar property to bind the selected value to and a collection property which will contain the items to show in the dropdown.

    So you could define a view model:

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

    and then on your main view model have a property of this type:

    public DropDownListViewModel Foo { get; set; }
    

    Now you could have a custom editor template for this type (~/Views/Shared/EditorTemplates/DropDownListViewModel.ascx):

    <%@ Control 
        Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DropDownListViewModel>" 
    %>
    <%= Html.DropDownListFor(x => x.SelectedValue, Model.Items) %>
    

    and then in your main view:

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

    Now all that's left is to have your controller action rendering the main view to fill the Foo property with the corresponding values. The could be hardcoded, come from a repository or whatever. It doesn't really matter.

    On the other hand if you knew the values in advance you could hardcode them in the editor template (~/Views/Shared/EditorTemplates/YesNoDropDown.ascx):

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

    and then:

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

    or by decorating the IsActive property on your view model:

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

    and then:

    <%= Html.EditorFor(x => x.IsActive) %> 
    
    0 讨论(0)
提交回复
热议问题