ASP.NET MVC - 如何在RedirectToAction中保留ModelState错误?
我有以下两种操作方法(简化问题):
[HttpGet]
public ActionResult Create(string uniqueUri)
{
// get some stuff based on uniqueuri, set in ViewData.
return View();
}
[HttpPost]
public ActionResult Create(Review review)
{
// validate review
if (validatedOk)
{
return RedirectToAction("Details", new { postId = review.PostId});
}
else
{
ModelState.AddModelError("ReviewErrors", "some error occured");
return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"]});
}
}
因此,如果验证通过,我将重定向到另一页(确认)。
如果发生错误,我需要显示包含错误的同一页面。
如果我执行return View()
,则会显示错误,但如果我执行return RedirectToAction
(如上所述),则会丢失模型错误。
我对这个问题并不感到惊讶,只是想知道你们是如何处理这个问题的?
我当然可以返回相同的View而不是重定向,但我在“Create”方法中有逻辑,它填充了视图数据,我必须复制它。
有什么建议?
没有找到相关结果
已邀请:
9 个回复
辰炔诚薯
动作中使用相同的
实例。 要做到这一点,你应该在
动作中将对象
保存在临时变量中,然后在
动作中恢复它。
另外我会建议,如果你想在第一次执行
动作后按下浏览器刷新按钮时也能正常工作,你可能会这样做
否则刷新按钮对象
将为空,因为
中没有任何数据。
感秆暴壳
然后根据您的示例,您可以保存/恢复ModelState,如下所示:
如果您还想在TempData中传递模型(建议使用bigb),那么您仍然可以这样做。
岭取
末钉蹈泰唬
TempData通过保留数据1次的动作传递。
混侩闯空坷
这是一个例子:
扇献隙
济畦刨
我的表单现在需要POST到一个HttpPost动作的Summary()。我有另一个非常小的ViewModel来表示已编辑的字段,而modelbinding将会得到这些字段。 新表格:
和行动......
在这里我做了一些验证,我检测到一些错误的输入,所以我需要返回带有错误的Summary页面。为此,我使用TempData,它将在重定向后继续使用。 如果数据没有问题,我用一个副本替换SummaryVM对象(但当然改变了编辑的字段)然后执行RedirectToAction(“NextAction”);
所有这些开始的摘要控制器操作会查找tempdata中的任何错误,并将它们添加到模型状态。
期差骇蓟
然后,当我需要这样的原始数据时,我会调用它:
呕蹿尉
从这里,您可以根据需要在控制器方法上简单地添加所需的数据注释。