Mik*_*osa 25 c# asp.net asp.net-mvc
我有一些代码可以在我们的系统中保存一张票.如果有错误,它会执行RedirectToAction.问题是我似乎没有在新动作中出现错误.我怎样才能解决这个问题?
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");
Run Code Online (Sandbox Code Playgroud)
我知道有人建议使用TempData,但是如何从ModelState中获取每个错误?
谢谢.
小智 41
PRG模式还可以,但我这样做了:
基础控制器:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (TempData["ModelState"] != null && !ModelState.Equals(TempData["ModelState"]))
ModelState.Merge((ModelStateDictionary)TempData["ModelState"]);
base.OnActionExecuted(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
动作(我正在使用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());
}
Run Code Online (Sandbox Code Playgroud)
该操作抛出异常,将ModelState添加到TempData并重定向回引用者.由于捕获了动作,OnActionExecuted仍然执行,但ModelState第一次与TempData ["ModelState"]相同,因此您不想与自己合并.执行重定向操作时,OnActionExecuted再次触发.这一次,如果TempData ["ModelState"]中有任何内容,它会与此动作的ModelState合并.
您可以使用TempData ["ModelState.user"] = ModelState将其扩展为多个模型,然后合并以ModelState开头的每个TempData对象.
Sco*_*pey 30
我知道这个帖子已经过时了,但是关于ASP.NET最佳实践的博客有一些很好的建议.
页面上的#13处理使用2个Action过滤器ModelState
在重定向之间进行保存和恢复.
这是我的作品使用的模式,我喜欢它.
这是简化的例子:
[ImportModelStateFromTempData]
public ActionResult Dashboard()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post), ExportModelStateToTempData]
public ActionResult Dashboard(string data)
{
if (ValidateData(data))
{
try
{
_service.Submit(data);
}
catch (Exception e)
{
ModelState.AddModelError(ModelStateException, e);
}
}
return RedirectToAction("Dashboard");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18911 次 |
最近记录: |