当操作类型为:RedirectToRouteResult时,在视图中显示错误

本文关键字:视图 显示 错误 类型 操作 RedirectToRouteResult | 更新日期: 2023-09-27 18:04:16

下面的代码没有在视图中显示我的错误,我如何确保我的错误在视图中显示?

注意,如果某个地方出错了,我会抛出一个规则异常,如果是这样,我会将错误复制到modelstate
    [HttpPost]
    public RedirectToRouteResult TaskDueDate(int id, int taskid)
    {
        var duedate = Request.Form["duedate"];
        var duetime = Request.Form["duetime"];
        try
        {
            var newduedate = DateHelper.GoodDate(duedate, duetime);
            _service.SetTaskDueDate(id, taskid, newduedate);
            this.FlashInfo("success, task due date has been updated...");
        }
        catch (RulesException ex)
        {
            ex.CopyTo(ModelState);
        }
        return RedirectToAction("TaskDetail");
    }

交货。CopyTo扩展方法:

public static void CopyTo(this RulesException ex, ModelStateDictionary modelstate)
    {
        CopyTo(ex,modelstate,null);
    }
    public static void CopyTo(this RulesException ex, ModelStateDictionary modelstate, string prefix)
    {
        prefix = string.IsNullOrEmpty(prefix) ? "" : prefix + ".";
        foreach (var propertyerror in ex.Errors)
        {
             string key = ExpressionHelper.GetExpressionText(propertyerror.Property);
            modelstate.AddModelError(prefix + key, propertyerror.Message);
        }
    }

在我看来,我基本上有:

        <div id="Errors">
            <span id="ServerResponse"></span>
            <%= Html.ValidationSummary(false, "")%>
        </div>

我认为模型状态被清除,没有错误留在重定向??

当操作类型为:RedirectToRouteResult时,在视图中显示错误

是的,重定向是对浏览器的响应,告诉它发出新的请求,因此您拥有的任何上下文都将丢失。

当有东西要显示时,你可以显示一个错误页面:

if (ModelState.Count > 0) {
  return View("ErrorPage");
} else {
  return RedirectToAction("TaskDetail");
}

您需要将操作方法的返回类型更改为基类AcionResult,以返回不同类型的操作结果。