背景
我有一个在Partial Views
和Editor Templates
的帮助下分成许多小形式的视图。每个表单都有一个保存按钮,当用户提交其中一个表单时,将显示该部分的loader.gif,直到完成ajax调用。现在,我只是根据发布的模型返回局部视图。如果他们发布的数据存在问题,我的验证类将返回一条消息,否则应用程序将抛出异常。
问题
我能看到的一个问题是,如果我的应用程序认为数据已保存(例如没有异常且没有验证错误),但由于某种原因,客户端数据未正确映射到实体,服务,数据库等(我确实有单元测试到位)。如果我返回给我的模型,客户端将不会看到更改失败,因为新值将在视图中。如果我重新查询数据库并重新填充模型,用户将在视图中看到成功消息,但数据将恢复到保存之前。 requerying确实为action方法增加了额外的开销和逻辑,但是有必要吗?只是想知道其他人做了什么,或者我是否在考虑这个问题。感谢。
// this is the view that other actions will call because they are all the same on the controller
// only use TQueryParam if I am requerying
[HttpPost]
[ValidateAntiForgeryToken]
public PartialViewResult Edit<TModel, TCommandParam, TQueryParam>(TModel model, string viewName, IViewModelEnricher<TModel> enricher = null) where TCommandParam : ICommandParam
{
// fill in necessary properties such as select lists
if (enricher != null)
enricher.Enrich(model);
if (ModelState.IsValid)
{
var cmdParam = Mapper.Map<TModel, TCommandParam>(model);
foreach (var error in _dispatcher.Validate(cmdParam))
ModelState.AddModelError(error.MemberName, error.Message);
if (ModelState.IsValid)
{
_dispatcher.Dispatch(cmdParam);
TempData["Saved"] = "Your data was saved successfully!";
// TODO: do i requery database for the model and make this method a little more complicated?
//var result = _dispatcher.Dispatch<TQueryParam>(new GetOperationById(model.Id));
//model = Mapper.Map<TQueryParam, TModel>(result);
}
}
return PartialView(viewName, model);
}