Преобразование булевского редактора свойств в раскрывающийся список в представлении MVC
В настоящее время у меня есть вид, где логическое свойство моей модели передается в помощник Html.EditorFor:
@Html.EditorFor(model => model.EndCurrentDeal)
Все хорошо и хорошо, но то, что я действительно хочу сделать, - это массаж, который выпадающий, например:
<select>
<option value="true" selected="selected">Yes</option>
<option value="false">No</option>
</select>
Какой самый простой способ достичь этого?
Спасибо,
Крис
Ответы
Ответ 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