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