Подтвердить что ты не робот

Преобразование булевского редактора свойств в раскрывающийся список в представлении MVC

В настоящее время у меня есть вид, где логическое свойство моей модели передается в помощник Html.EditorFor:

@Html.EditorFor(model => model.EndCurrentDeal)

Все хорошо и хорошо, но то, что я действительно хочу сделать, - это массаж, который выпадающий, например:

<select>
    <option value="true" selected="selected">Yes</option>
    <option value="false">No</option>
</select>

Какой самый простой способ достичь этого?

Спасибо,

Крис

4b9b3361

Ответ 1

Вы можете попробовать что-то вроде здесь:

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

Если вы хотите значение по умолчанию:

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

Ответ 2

MVC 4

@*/////////////////// bool ////////////////////////////////*@
@model bool

@Html.DropDownListFor(m => m, new SelectList(
        new[] 
        { 
            new { Value = "true", Text = "Yes" },
            new { Value = "false", Text = "No" },
        },
        "Value",
        "Text",
        Model
    ))

@*/////////////////// bool? ////////////////////////////////*@    
@model bool?

@Html.DropDownListFor(m => m, new SelectList(
        new[] 
        { 
            new { Value = "", Text = "(none)" },
            new { Value = "true", Text = "Yes" },
            new { Value = "false", Text = "No" },
        },
        "Value",
        "Text",
        Model
    ))

Ответ 3

Вы также можете попробовать использовать подход "Словарь" немного чище и его можно легко добавить к вашему конструктору для просмотра модели.

ViewModel

 //Define IDictionary interface
 public IDictionary<bool, string> options { get; set; }

public YourViewModel()
{
  // Default constructor
        this.options = new Dictionary<bool, string>();
        this.options.Add(false, "no");
        this.options.Add(true, "yes");
}




@Html.DropDownListFor(model => model.yourPropertyToEdit, new SelectList( Model.options, "Key", "Value"))

Ответ 4

Меня вдохновил очень полезный ответ от Francois Borgies, поэтому я решил написать собственный метод, который создает SelectList для Boolean, которое может использоваться в @Html.DropDownList. Когда у вас есть вспомогательный метод, который можно использовать в каждом представлении, он уменьшает количество кода, необходимого для просмотра бритвы.

Мой проект имеет CustomHelpers.cs класс в папке: App_Code/Helpers

namespace YourProjectName.App_Code.Helpers
{
    public static class CustomHelpers
    {
        public static SelectList SelectListForBoolean(object selectedValue = null)
        {
            SelectListItem[] selectListItems = new SelectListItem[2];

            var itemTrue = new SelectListItem();
            itemTrue.Value = "true";
            itemTrue.Text = "Yes";
            selectListItems[0] = itemTrue;

            var itemFalse = new SelectListItem();
            itemFalse.Value = "false";
            itemFalse.Text = "No";
            selectListItems[1] = itemFalse;

            var selectList = new SelectList(selectListItems, "Value","Text", selectedValue);

            return selectList;
        }           
    }
}

В представлении создания вы можете использовать его следующим образом:

@model Foo
@using YourProjectName.App_Code.Helpers;
...
@Html.DropDownList("EndCurrentDeal", CustomHelpers.SelectListForBoolean(), "-select-")

для просмотра вида

@model Bar
@using YourProjectName.App_Code.Helpers;
...
@Html.DropDownList("EndCurrentDeal", CustomHelpers.SelectListForBoolean(Model.EndCurrentDeal), "-select-")

Хотя мой вспомогательный метод не является чистым HTML-помощником, потому что он создает SelectList, - он тем не менее следует тем же функциям, что и Рахул Раджат Сингх, в его превосходной статье Абсолютный начинающий учебник по HTML-помощникам и создание пользовательских HTML-помощников в ASP.NET MVC