我有一些代码可以在我们的系统中保存票证。如果出现错误,它会执行 RedirectToAction()
。问题是我在新 Action 中似乎没有错误。我该如何解决这个问题?
ModelState.AddModelError("_FORM", "Unable to save ticket");
ModelState.AddModelError("_FORM", "Phone number was invalid.");
ModelState.AddModelError("_FORM", "Lane number is required.");
return RedirectToAction("CreateStep", "Ticket");
我知道有些人建议使用 TempData
,但我如何从 ModelState
中找出每个错误?
谢谢。
最佳答案
PRG 模式没问题,但我这样做了:
基础 Controller :
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (TempData["ModelState"] != null && !ModelState.Equals(TempData["ModelState"]))
ModelState.Merge((ModelStateDictionary)TempData["ModelState"]);
base.OnActionExecuted(filterContext);
}
操作(我正在使用 xVal ):
try
{
user.Login();
AuthenticationManager.SignIn(user);
}
catch (RulesException rex)
{
// on bad login
rex.AddModelStateErrors(ModelState, "user");
TempData["ModelState"] = ModelState;
return Redirect(Request.UrlReferrer.ToString());
}
该操作抛出异常,将 ModelState
添加到 TempData
并重定向回 referrer。由于 Action 被捕获,OnActionExecuted
仍然被执行,但是第一次围绕 ModelState
与 TempData["ModelState"]
相同,所以你不想与自己融合。执行重定向操作时,OnActionExecuted
再次触发。这一次,如果 TempData["ModelState"]
中有任何内容,它将与此操作的 ModelState 合并。
您可以使用 TempData["ModelState.user"] = ModelState
将其扩展到多个模型,然后合并以 ModelState 开头的每个
。TempData
对象。
关于c# - 使用 RedirectToAction 时如何维护 ModelState 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/658747/