我有一个删除对象的方法。删除不拥有视图,并位于“EditReport”中的“Delete”按钮中。成功删除后将重定向到“Report”页面。
[HttpPost]
[Route("{reportId:int}")]
[ValidateAntiForgeryToken]
public IActionResult DeleteReport(int reportId)
{
var success = _reportService.DeleteReportControl(reportId);
if (success == false)
{
ModelState.AddModelError("Error", "Messages");
return RedirectToAction("EditReport");
}
ModelState.AddModelError("OK", "Messages");
return RedirectToAction("Report");
}
在ASP.NET MVC 5中,我使用以下属性在方法之间保存ModelState。我从这里获取了信息:https://dev59.com/n2445IYBdhLWcg3w6eNo#12024227。
public class SetTempDataModelStateAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
filterContext.Controller.TempData["ModelState"] =
filterContext.Controller.ViewData.ModelState;
}
}
public class RestoreModelStateFromTempDataAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (filterContext.Controller.TempData.ContainsKey("ModelState"))
{
filterContext.Controller.ViewData.ModelState.Merge(
(ModelStateDictionary)filterContext.Controller.TempData["ModelState"]);
}
}
}
在ASP.NET MVC 6 RC 1 (ASP.NET Core 1.0)中,这段代码无法正常工作。
filterContext.Controller中未定义TempData和ViewData。
SetTempDataModelStateAttribute
行中,var listError = modelState.ToDictionary(m => m.Key, m => m.Value.Errors
应该是modelState.Where(x => x.Value.Errors.Any()).ToDictionary(m...
。 - Serj Saganawait next();
是不正确的,因为它会导致该方法被多次调用。 - Serj Sagan