CRUD编辑视图的输入模型与视图模型

时间:2011-04-21 14:46:16

标签: asp.net-mvc forms viewmodel

对于我的存储库中的每个实体,我有一个视图模型和一个输入模型。我发现有一个输入模型来存储关系ID(与外来实体相对)使渲染选择列表更容易,但是哪个模型会传递到编辑视图进行渲染,查看模型输入模型

Category实体的示例POST操作:

[HttpPost]
public ActionResult Edit(CategoryInputModel inputModel)
{
    // map inputModel to entity and persist
    // ...
}

查看型号:

[HttpGet]
public ActionResult Edit(int id)
{
    var category = _unitOfWork.CurrentSession.Get<Category>(id);
    var viewModel = Mapper.Map<Category, CategoryViewModel>(category);
    return View(viewModel);
}

在这种情况下,编辑视图表单将负责为POST操作提供正确的输入模型字段。

输入模型:

[HttpGet]
public ActionResult Edit(int id)
{
    var category = _unitOfWork.CurrentSession.Get<Category>(id);
    var inputModel = Mapper.Map<Category, CategoryInputModel>(category);
    return View(inputModel);
}

从长远来看哪个更容易维护?

2 个答案:

答案 0 :(得分:3)

我现在使用的输入模型不包含ID。我将实体ID保留为动作参数,如下所示:

[HttpPost]
public ActionResult Edit(Guid id, CategoryInputModel inputModel)
{
    var category = _categoryRepository.Get(id);
    // do mappings from inputModel to category and save
    // ...
}

答案 1 :(得分:2)

当详细/编辑屏幕完全相同时,我使用相同的ViewModel。

但是就像你已经注意到的那样,当屏幕不同时我会使用InputModel,我称之为FormModels。

我认为使用AutoMapper维护ViewModel非常便宜。使用.AssertConfigurationIsValid()(我忘记确切的方法名称)会立即告诉您域/商务对象与表单/视图模型之间的不同步。