可能很简单,但我似乎错过了一些东西。
两种型号:
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 类型属性的 Hardware 继承的 viewModel ?
随着您的应用程序变得越来越复杂,您将看到您的 MVC 应用程序变成 M-VM-V-C,VM 是专用的 ViewModel,通常会添加 UI 层生成 UI 所需的所有内容。
在这种情况下,我个人不会采用继承,因为您的 ViewModel 不是模型的专门版本。这正是您的 UI 创建视图所需的(这实际上取决于您)。
我的 ViewModel 看起来像这样:
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 };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)