我有以下代码,但是错误causght没有显示.哪里不对 ?
public ActionResult DeleteRateGroup(int id) { try { RateGroup.Load(id).Delete(); RateGroupListModel list = new RateGroupListModel(); return GetIndexView(list); } catch (Exception e) { RateGroupListModel model = new RateGroupListModel(); if (e.InnerException != null) { if (e.InnerException.Message.Contains("REFERENCE constraint")) ModelState.AddModelError("Error","The user has related information and cannot be deleted."); } else { ModelState.AddModelError("Error",e.Message); } return RedirectToAction("RateGroup",model); } }
@model MvcUI.Models.RateGroupListModel @{ View.Title = "RateGroup"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>Rate Group</h2> @Html.ValidationSummary() @using (Html.BeginForm())
private ActionResult GetIndexView(RateGroupListModel model) { return View("RateGroup",model); } public ActionResult RateGroup(RateGroupListModel model) { return GetIndexView(model); }
解决方法
看起来你正在设置ModelState错误,然后重定向到另一个操作.我确定当你这样做时,ModelState会丢失.
通常,您只需从DeleteRateGroup操作直接呈现RateGroup视图,而不需要重定向,如果需要,请传入模型,如下所示:
return View("RateGroup",model);
如果您希望ModelState与您进行第二个操作,请查看MvcContrib的ModelStateToTempDataAttribute.这是属性的描述,从MvcContrib源代码的意见:
When a RedirectToRouteResult is returned from an action,anything in the ViewData.ModelState dictionary will be copied into TempData. When a ViewResultBase is returned from an action,any ModelState entries that were prevIoUsly copied to TempData will be copied back to the ModelState dictionary.