本文介绍了我怎样才能在.NET MVC多个视图重用一个DropDownList的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从我的项目有几个观点具有相同的DropDownList ...

Several views from my project have the same dropdownlist...

所以,在视图模型从该视图我有:

So, in the ViewModel from that view I have :

public IEnumerable<SelectListItem> FooDdl { get; set; }

和控制器我有:

var MyVM = new MyVM() {
    FooDdl = fooRepository.GetAll().ToSelectList(x => x.Id, x => x.Name)
}

到目前为止好......但是I'm在做每个视图/控制器在同一code,它有一个DDL ...

So far so good... But I´m doing the same code in every view/controller that have that ddl...

时,最好的办法做到这一点?

Is that the best way to do that?

感谢

推荐答案

我们还使用了静态类:

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;
        }
}

在视图中,我们有没有什么特别的:

In the view we have nothing special :

@Html.DropDownListFor(x => x, SelectLists.CompanyClasses(Model))

和有时我们也创建一个EditorTemplate所以它的速度更快重用像这样

And sometime we also create an EditorTemplate so it's faster to reuse like this

型号:

[Required, UIHint("CompanyClassPicker")]
public int? ClassId { get; set; }

EditorTemplate:

EditorTemplate :

@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))
}

这篇关于我怎样才能在.NET MVC多个视图重用一个DropDownList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-19 20:32