Nic*_*own 8 c# asp.net-mvc razor asp.net-mvc-4
可能很简单,但我似乎错过了一些东西.
两种型号:
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; }
}
Run Code Online (Sandbox Code Playgroud)
当我进入硬件创建视图时,我希望能够从制造商的下拉列表中进行选择,并且当它提交时,它应该在硬件和选择的制造商之间建立关系.
目前,我一直在使用以下方法在控制器中构建一个selectList
SelectList selectList = new SelectList(db.Manufacturers, "Id", "Name");
ViewBag.selectList = selectList;
Run Code Online (Sandbox Code Playgroud)
然后在视图中将其强制转换:
@Html.DropDownListFor(model => model.Manufacturer, ViewBag.selectList as SelectList)\
Run Code Online (Sandbox Code Playgroud)
但是,似乎应该有更好的方法来执行此操作 - 可能创建一个viewModel,它继承自具有SelectList类型属性的硬件?
Bas*_*nni 17
随着您的应用程序变得越来越复杂,您将看到您的MVC应用程序转变为M-VM-VC,VM是专用的ViewModel,它通常会添加UI层所需的所有内容以生成UI.
在这种情况下,我个人不会继承继承,因为您的ViewModel不是您的模型的专用版本.这正是您的UI创建视图所需要的(这完全取决于您).
我的ViewModel看起来像这样:
public class HardwareVm
{
public Hardware Hardware { get; set; }
public IEnumerable<SelectListItem> Manufacturers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在视图中:
@Html.DropDownListFor(model => model.Hardware.Manufacturer, Manufacturers)
Run Code Online (Sandbox Code Playgroud)
控制器:
var manufacturers = db.Manufacturers.Select(m => new SelectListItem {Text = m.Name, Value = m.Id });
var model = new HardwareVm { Manufacturers = manufacturers };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7912 次 |
| 最近记录: |