如何在两个控制器之间传递数据?

时间:2010-08-04 19:42:42

标签: asp.net-mvc-2

在我的具体示例中,我需要将在一个控制器上收到的错误传递给另一个将要显示的控制器。这是我设置的测试用例。我试过TempData,ViewData和Session。我注意到的另一件事是,这可能是我重定向的方式。当我在接收控制器上放置一个断点时,我只是去了它,我点击了断点,但是在重定向上它从未命中。

发送控制器操作

public ActionResult New()
    {
        Session["Notice"] = "There was an error";
        Session["NoticeClass"] = "error";
        return RedirectToAction("Index", "Home");
    }

然后这是接收控制器:

public ActionResult Index()
    {
        //Handle action

        return View();
    }

然后部分视图会显示发现的任何错误或通知

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%
    string Message = "";
    string Class = "hidden";
    if (ViewData["Notice"] != null && ViewData["Notice"] != "")
    {
        Message = (string)ViewData["Notice"];
        Class = (string)ViewData["NoticeClass"];
    }
    if (Session["Notice"] != null && Session["Notice"] != "")
    {
        Message = (string)Session["Notice"];
        Class = (string)Session["NoticeClass"];
        Session["Notice"] = null;
    }

    Response.Write("<div class=\"" + Class + "\" id=\"error_div\"><span id=\"error_span\">" + Message + "</span></div>");
%>

2 个答案:

答案 0 :(得分:1)

  

更新:首先,抱歉,但我还是   不能得到清晰的图片 - 假设   你想把数据合二为一   控制器动作将它传递给另一个   控制器的动作,然后渲染   这在局部视图中。您可以使用   会话以获取值   其他控制器就像你一样   存储它....但我认为tempdata可能也适用于你的情况......然后重定向 -

return RedirectToAction("Action","Controller",routevalues)
  

我认为你应该阅读有关tempdata的内容   和viewdata更多here和不   除非已分配,否则请使用ViewData   这是我在你的身上看不到的一些价值   代码,你还在使用它。

Tempdata存储每个请求的值....因此新请求意味着它将丢失值。如果您希望使用tempdata传递值,请查看this

所以,在你的情况下,如果你只是想传递一个字符串做这样的事情 -

    public ActionResult New()
    {
        string str = "There was an error";
        return RedirectToAction("Index",str);
    }
    public ActionResult Index(string str)
    {
        Response.Write(str);
        return View();
    }

答案 1 :(得分:1)

显然,有一些特定的东西可以重定向到网站的根目录。当我将重定向从/ home / index更改为另一个动作时,它工作正常。只有当我重定向到那个时,我的价值观才会消失。