我一直看到直接使用域模型作为视图的参数是不好的做法。但不这样做似乎过于复杂且容易出错。例子:
这是编辑的视图ItemViewModel
:
@model ItemViewModel
@using (Html.BeginForm())
{
<p>@Html.ValidationSummary()</p>
@Html.LabelFor(o => o.ItemId) : @Html.EditorFor(o => o.ItemId)
@Html.LabelFor(o => o.MyItemProperty) : @Html.EditorFor(o => o.MyItemProperty)
}
这是处理此问题的控制器方法
public ActionResult Edit(int? id)
{
Item itemViewModel = new ItemViewModel();
if (id != null && id != 0)
{
var item = itemRepository.Items.FirstOrDefault(c => c.Id == id);
if (item != null)
{
itemViewModel.ItemId = item.ItemId;
itemViewModel.MyItemProperty = item.ItemId;
}
}
return View(itemViewModel);
}
[HttpPost]
public ActionResult Edit(ItemViewModel itemViewModel)
{
var item = itemRepository.Items.FirstOrDefault(c => c.Id == itemViewModel.Id);
item.Id = itemViewModel.Id;
item.MyItemProperty = itemViewModel.MyItemProperty;
itemRepository.Save(item);
return View("Success");
}
这意味着我必须再次转换Item
为。如果我添加一个新属性而我忘记将它添加到转换中,我最终会得到未保存的更改。ItemViewModel
Item
Item
这是你的做法还是我错过了什么?