【问题标题】:How do I pass data between two controllers?如何在两个控制器之间传递数据?
【发布时间】:2010-08-05 04:53:49
【问题描述】:

在我的具体示例中,我需要将在一个控制器上接收到的错误传递给另一个控制器来显示它。这是我设置的一个测试用例。我试过 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>");
%>

【问题讨论】:

  • 我发现我可以在接收控制器上设置 TempData、Session 或 ViewData 就好了,但是当我设置其中任何三个的值时,然后执行重定向操作,值就会出现每次都会迷路。

标签: asp.net-mvc-2


【解决方案1】:

更新:首先,对不起,但我仍然 无法获得清晰的图片 - 假设 你想把数据集中在一起 控制器动作将其传递给另一个 控制器的动作然后渲染 这是片面的看法。您可以使用 获取值的会话 其他控制器只是以您的方式 存储它....但我认为临时数据也可能适用于您的情况..然后用于重定向 -

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

我认为您应该阅读有关临时数据的信息 并查看数据更多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();
    }

【讨论】:

  • 我实际上把它写出来,并在母版页中使用的部分视图中格式化它。它查找错误并显示它们。
  • 另外我实际上传递了两条数据。另外,我不只是传递给一个不同的动作,我传递给一个完全不同的控制器。
  • 如果你在控制器之间传递数据——我想你可能想要使用会话。更清楚地发布您想要实现的目标..看看这个简单的例子 - msdn.microsoft.com/en-us/library/dd394711.aspx
  • 用附加信息更新了问题。
  • 如果我在同一页面上设置错误,我正在执行我使用 ViewData 的操作,如果我在另一个控制器上设置它,然后重定向它,我使用 Session。这就是我检查两者的原因。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 2017-02-16
    相关资源
    最近更新 更多