Pau*_*aul 15 c# asp.net-mvc asp.net-mvc-4
我项目中的几个视图都有相同的下拉列表...
所以,在该视图的ViewModel中,我有:
public IEnumerable<SelectListItem> FooDdl { get; set; }
Run Code Online (Sandbox Code Playgroud)
在控制器中我有:
var MyVM = new MyVM() {
FooDdl = fooRepository.GetAll().ToSelectList(x => x.Id, x => x.Name)
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都那么好......但是我在每个具有该ddl的视图/控制器中执行相同的代码...
这是最好的方法吗?
谢谢
我们还使用静态类:
public static class SelectLists
{
public static IList<SelectListItem> CompanyClasses(int? selected)
{
var session = DependencyResolver.Current.GetService<ISession>();
var list = new List<SelectListItem>
{
new SelectListItem
{
Selected = !selected.HasValue,
Text = String.Empty
}
};
list.AddRange(session.All<CompanyClass>()
.ToList()
.OrderBy(x => x.GetNameForCurrentCulture())
.Select(x => new SelectListItem
{
Selected = x.Id == (selected.HasValue ? selected.Value : -1),
Text = x.GetNameForCurrentCulture(),
Value = x.Id.ToString()
})
.ToList());
return list;
}
}
Run Code Online (Sandbox Code Playgroud)
在我们看来,没有什么特别的:
@Html.DropDownListFor(x => x, SelectLists.CompanyClasses(Model))
Run Code Online (Sandbox Code Playgroud)
有时我们还会创建一个 EditorTemplate,这样重用起来会更快
模型 :
[Required, UIHint("CompanyClassPicker")]
public int? ClassId { get; set; }
Run Code Online (Sandbox Code Playgroud)
编辑器模板:
@model int?
@if (ViewBag.ReadOnly != null && ViewBag.ReadOnly)
{
var item = SelectLists.CompanyClasses(Model).FirstOrDefault(x => x.Selected);
if (item != null)
{
<span>@item.Text</span>
}
}
else
{
@Html.DropDownListFor(x => x, SelectLists.CompanyClasses(Model))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7661 次 |
| 最近记录: |