我无法掌握创建视图模型并使用实体框架将该信息保存回数据库的正确方法,而且我似乎找不到我正在寻找的信息,所以如果我忽略了它,请原谅我。
我看到了这个帖子here https://stackoverflow.com/questions/5043213/mvc-drop-down-list-not-mapping-to-model他似乎在问同样的问题,但没有得到答案。
我的主要问题是,
出于编辑目的,如果我有ProductModel model
有一个Warranty model
关系,我应该使用virtual property Warranty
在视图模型中或者我应该使用int WarrantyId
?
如果我应该使用虚拟财产,为什么这段代码不保存Warranty
适当地?
我是否需要明确标记或填充更新保修?
请注意,这确实会填充我的编辑视图并按预期选择列表。
我的(简化的)代码设置如下:
Model:
public int ModelId{ get; set; }
public int ModelNumber { get; set; }
public virtual Warranty Warranty { get; set;}
查看型号:
public int ModelId { get; set; }
[Required(ErrorMessage = "Model Number required")]
[StringLength(25, ErrorMessage = "Must be under 25 characters")]
[Display(Name="Model Number")]
public string ModelNumber { get; set; }
//related objects and necesary properties
public virtual Warranty Warranty { get; set; }
public IEnumerable<SelectListItem> WarrantySelectListItems { get; set; }
控制器(获取):
public ActionResult Edit(int? id)
{
//check the id
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
//get the model and make sure the object is populated
var model = _modelService.GetModel(id.Value);
if (model == null)
{
return HttpNotFound();
}
//pass our entity (db) model to our view model
var editModelModel = new EditModelModel();
editModelModel.InjectFrom(model);
//warranty select list
editModelModel.WarrantySelectListItems = WarrantySelectList(editModelModel.Warranty.WarrantyId);
//option multi select list
editModelModel.OptionSelectListItems = OptionSelectList();
return View(editModelModel);
}
控制器(POST)(正在进行中):
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(EditModelModel editModelModel)
{
if (!ModelState.IsValid)
{
return View(editModelModel);
}
var modelEntity = new Model();
modelEntity.InjectFrom(editModelModel);
_modelService.Update(modelEntity);
_unitOfWork.Save();
return RedirectToAction("Index");
}
视图(简化):
<div class="form-group">
@Html.Label("Warranty", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(x => x.Warranty.WarrantyId, Model.WarrantySelectListItems, "--Select--")
@Html.ValidationMessageFor(model => model.Warranty.WarrantyId)
</div>
</div>
同样,我只想知道设置这些视图模型和模型的正确/最佳方法,以便 EF 完成尽可能多的工作。我觉得如果我必须创建一个WarrantyId
领域,我做错了什么,但也许情况并非如此。
提前致谢。非常感谢任何见解/帮助。