下拉列表更好,因为ViewBag或模型C#部分/。NET MVC4(Dropdown list be

2019-07-18 13:13发布

或许简单,但我似乎失去了一些东西。

两种型号:

public class Hardware
{
    [Required]
    public int Id { get; set; }

    public int SerialNum { get; set; }
    public int ProductNum { get; set; }
    public string Notes { get; set; }
    public DateTime PurchaseDate { get; set; }
    public DateTime WarrantyExpiration { get; set; }

    public virtual Manufacturer Manufacturer { get; set; }
}

public class Manufacturer
{
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    public virtual ICollection<Hardware> Hardware { get; set; }
}

当我去到硬件上创建的看法,我希望能够从制造商的下拉列表中选择,并在其提交它应该建立的硬件和选择制造商之间的关系。

目前,我已经使用以下建立在控制器的SelectList了

SelectList selectList = new SelectList(db.Manufacturers, "Id", "Name");
ViewBag.selectList = selectList;

然后铸造它的观点:

@Html.DropDownListFor(model => model.Manufacturer, ViewBag.selectList as SelectList)\

但是,好像应该有更好的方式来做到这一点 - 也许创造,从硬件继承了的SelectList类型属性一个ViewModel?

Answer 1:

随着应用程序变得越来越复杂,你会看到你的MVC应用程序变成M-VM-VC,VM是专用的ViewModels通常将所有的东西,为了你的UI层需要产生的UI。

我个人不会在这种情况下继承去的,因为你的视图模型是不是你的模型的专用版本。 这是你的UI需要创建一个视图(这是真的给你)什么。

我的视图模型会是这个样子:

public class HardwareVm
{
     public Hardware Hardware { get; set; }
     public IEnumerable<SelectListItem> Manufacturers { get; set; }
} 

在查看:

@Html.DropDownListFor(model => model.Hardware.Manufacturer,  Manufacturers)

控制器:

var manufacturers = db.Manufacturers.Select(m => new SelectListItem {Text = m.Name, Value = m.Id });
var model = new HardwareVm { Manufacturers = manufacturers };


文章来源: Dropdown list better as ViewBag or part of model C#/.NET MVC4