Преобразование HTML.EditorFor в раскрывающемся списке (html.dropdownfor?)
В настоящее время я использую Html.Элемент управления EditorFor на странице просмотра "создать" по умолчанию.
<%: Html.EditorFor(model => model.IsActive) %>
Я хотел бы преобразовать это в раскрывающийся список со значениями и по-прежнему привязываться к модели в представлении. Мой вопрос двоякий.
Если в раскрывающемся списке требуется только 2/3 значений..есть ли быстрый способ явно заполнить 2 или 3 значения?
Если список большой и должен исходить из sql-запроса, как это сделать это?
заранее спасибо за помощь.
1 ответов
чтобы создать раскрывающийся список, вам нужно 2 свойства в модели представления: скалярное свойство для привязки выбранного значения и свойство коллекции, которое будет содержать элементы для отображения в раскрывающемся списке.
таким образом, вы можете определить модель представления:
public class DropDownListViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
и тогда на вашей модели основного вида есть свойство этого типа:
public DropDownListViewModel Foo { get; set; }
теперь у вас может быть пользовательский шаблон редактора для этого типа (~/Views/Shared/EditorTemplates/DropDownListViewModel.ascx
):
<%@ Control
Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DropDownListViewModel>"
%>
<%= Html.DropDownListFor(x => x.SelectedValue, Model.Items) %>
и затем в вашем главном представлении:
<%= Html.EditorFor(x => x.Foo) %>
теперь все, что осталось, это иметь действие контроллера, отображающее основной вид, чтобы заполнить Foo
свойство с соответствующими значениями. Это может быть жестко закодировано, взято из хранилища или что-то еще. Это не имеет значения.
С другой стороны, если бы вы знали значения заранее, вы могли бы жестко закодировать их в шаблоне редактора (~/Views/Shared/EditorTemplates/YesNoDropDown.ascx
):
<%= Html.DropDownList(
"",
new SelectList(
new[]
{
new { Value = "true", Text = "Yes" },
new { Value = "false", Text = "No" },
},
"Value",
"Text",
Model
)
) %>
и затем:
<%= Html.EditorFor(x => x.IsActive, "YesNoDropDown") %>
или украшения Свойство IsActive в вашей модели представления:
[UIHint("YesNoDropDown")]
public bool IsActive { get; set; }
и затем:
<%= Html.EditorFor(x => x.IsActive) %>