目前我在默认的“创建”视图页面中使用Html.EditorFor控件,如下所示。
<%: Html.EditorFor(model => model.IsActive) %>
我想将这个转换为带有值的下拉列表,并仍然绑定到视图中的模型。我的问题有两个。
如果在下拉列表中只需要2/3个值..是否有一种快速的方法来显式地填充2或3个值?
如果列表很大并且需要从SQL查询中获取,该怎么做?
先感谢您的帮助。
目前我在默认的“创建”视图页面中使用Html.EditorFor控件,如下所示。
<%: Html.EditorFor(model => model.IsActive) %>
我想将这个转换为带有值的下拉列表,并仍然绑定到视图中的模型。我的问题有两个。
如果在下拉列表中只需要2/3个值..是否有一种快速的方法来显式地填充2或3个值?
如果列表很大并且需要从SQL查询中获取,该怎么做?
先感谢您的帮助。
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) %>