Ich habe eine Methode, um das Objekt zu entfernen. Die Entfernung besitzt keine eigene Ansicht und ist eine Schaltfläche "Löschen" im "EditReport". Nach erfolgreichem Entfernen einer Weiterleitung auf "Report".Wie Verwenden von ModelState mit RedirectToAction in ASP.NET MVC 6?
[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");
}
In ASP.NET MVC 5 verwende ich die folgenden Attribute, um ModelState zwischen Methoden zu speichern. Ich nahm von hier: https://stackoverflow.com/a/12024227/3878213
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"]);
}
}
}
Aber in ASP.NET MVC 6 RC 1 (ASP.NET-Core 1.0), dieser Code funktioniert nicht.
Fehler in filterContext.Controller enthält keine Definitionen für TempData und ViewData.
Es sollte eine Prüfung zu verhindern, dass keine Fehler in 'SetTempDataModelStateAttribute' line' var listError = modelState.ToDictionary (m => m.Key, m => m.Value.Errors sollte "modelState.Where (x => x.Value.Errors.Any()) sein. ToDictionary (m ...' –
Mit 'aware next() ; 'ist hier falsch, da dadurch die Methode mehrfach getroffen wird. –