我有以下代码,但是没有显示错误。有什么问题?
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);
}
答案 0 :(得分:13)
看起来您正在设置ModelState错误,然后重定向到另一个操作。我很确定当你这样做时,ModelState会丢失。
通常,您只需直接从DeleteRateGroup操作渲染RateGroup视图,而不需要重定向,如果需要,可以传入模型,如下所示:
return View("RateGroup", model);
如果您希望ModelState随身携带第二个动作,请查看MvcContrib的ModelStateToTempDataAttribute。这是属性的描述,来自MvcContrib源代码的注释:
当从动作返回RedirectToRouteResult时,ViewData.ModelState字典中的任何内容都将被复制到TempData中。从操作返回ViewResultBase时,先前复制到TempData的任何ModelState条目都将被复制回ModelState字典。