目前我正在使用一个
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) %>