如何将数据持久保存到项目中的任何控制器操作?

时间:2016-07-15 13:08:38

标签: c# asp.net-mvc controller data-persistence

我想在我的某些网站页面上自动保存表单。所以我挂钩window.onbeforeunload提交表单。我的问题是,我想通过toastr向他们提供成功或错误消息,但我不知道是否已存在某些内容可将数据从一个控制器操作持续到任何< / strong>对网站的行动。我不认为我可以使用tempdata或viewbag重定向。此功能是否已存在?

3 个答案:

答案 0 :(得分:1)

您是否尝试查看动作过滤器,可以在动作过滤器中捕获动作结果并保存数据。您还可以选择性地对动作或全局应用动作过滤器。看看这里 - http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs

答案 1 :(得分:0)

为什么不使用模特?我认为通过控制器传递数据的最佳方法是将您提交的模型传递给各自的操作,如

return View("ViewName",model);

如果您必须使用另一个控制器,请使用RedirectToAction

return RedirectToAction("YourAction", "YourController", new {model = yourModel});

To toastr我建议创建一个包装器,请参阅http://labs.bjfocus.co.uk/2014/06/create-an-mvc-wrapper-for-toastr/

答案 2 :(得分:0)

所以我能够通过使用OnActionExecuting类似于Preet Singh的响应来实现这一点,但还有一些额外的部分。

    public const string SESSION_ERROR = "SessionError";
    public const string SESSION_SUCCESS = "SessionSuccess";

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
        ViewBag.Error = HttpContext.Session[SESSION_ERROR];
        ViewBag.Success = HttpContext.Session[SESSION_SUCCESS];
        HttpContext.Session[SESSION_ERROR] = string.Empty;
        HttpContext.Session[SESSION_SUCCESS] = string.Empty;
    }

上面的代码用于将消息保存到任何控制器操作,并允许我使用HttpContext.Session轻松设置消息。此代码位于BaseController中,所有控制器都对其进行扩展。