【发布时间】:2014-08-21 22:15:39
【问题描述】:
假设我们有更新表格。
此表单需要两个操作。其中一个用于 GET 请求以显示数据,第二个用于 POST 请求以保存更改。
[HttpGet]
public ActionResult Update(int id)
{
var viewModel = GetViewModel(id);
viewModel.Dictionaries = GetUpdateDictionaries(id);
return View(viewModel);
}
[HttpPost]
public ActionResult Update(UpdateViewModel viewModel)
{
if(Model.IsValid)
{
Save(viewModel);
return RedirectToHome();
}
viewModel.Dictionaries = GetUpdateDictionaries(id);
return View(viewModel);
}
这是一种经典的方法。我们通过 POST 更新相同的视图模型。但是使用这个视图模型,我们传递了许多不必要的数据。例如字典。有人说这是一种不好的做法,并提出了两种替代方法:
1) 仅将视图模型用于表单数据并通过 ViewBug 传递字典和其他 stuuf 2) 仅为必要的表单数据创建特殊类,并在更新后操作中使用它。
有标准的方法吗?
【问题讨论】:
-
只有在您为它们创建表单字段或 Html.EditorFor(...) 标签时,字典才会被渲染或回发。所以我认为这是不好的做法的建议是错误的,你的代码是好的。
-
为您要发布的必要表单数据创建特殊类...
-
@Kartikeya Khosla 是的,它是选项之一。但我想了解什么更好以及为什么。什么是工业实践。
-
@Chris F Carroll 但是人们说我们不需要有我们不使用的多余数据。他们说得有道理。但我不喜欢建议的解决方案。
-
您的视图中是否使用了 viewModel.Dictionaries?如果是这样,那就不过分了。
标签: asp.net-mvc architecture viewmodel