假设我们有更新表格。
此表单需要两个操作。其中一个用于显示数据的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)仅为必要的表单数据创建特殊类,并在更新后的操作中使用它。
有标准方法吗?
答案 0 :(得分:0)
如果你的词典不是模型的一部分,那么MVC提供的将信息传递给View的替代方案是:
ViewData["MyDictionaries"]= GetUpdateDictionaries(id);
或
TempData["MyDictionaries"]= GetUpdateDictionaries(id);
或.Net 4:
ViewBag.MyDictionaries= GetUpdateDictionaries(id);
您是否担心viewModel.Dictionaries会全部被发送到客户端浏览器然后被发回服务器?它没有赢。只有您在标记中呈现的内容,例如用Html.TextBoxFor()将其发送到浏览器。所以从那个角度来看你现在的代码是可以的。
如果词典不是你的模型所依据的东西的一部分,那么对你的词典的真正反对意见是。 OO的重点是你的模型是某些东西的模型;因此,只应具有与其建模的某物相对应的属性。
如果你的模型不是某些东西的模型,而只是ViewModel的模型,那么就可以将字典放在它们上面了。但在这种情况下,Save(model)
不会很好。