gpt4 book ai didi

c# - 使用 RedirectToAction 时如何维护 ModelState 错误?

转载 作者:IT王子 更新时间:2023-10-29 04:20:09 25 4
gpt4 key购买 nike

我有一些代码可以在我们的系统中保存票证。如果出现错误,它会执行 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 仍然被执行,但是第一次围绕 ModelStateTempData["ModelState"] 相同,所以你不想与自己融合。执行重定向操作时,OnActionExecuted 再次触发。这一次,如果 TempData["ModelState"] 中有任何内容,它将与此操作的 ModelState 合并。

您可以使用 TempData["ModelState.user"] = ModelState 将其扩展到多个模型,然后合并以 ModelState 开头的每个 TempData 对象。

关于c# - 使用 RedirectToAction 时如何维护 ModelState 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/658747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com