Как передать данные между двумя контроллерами? - PullRequest
0 голосов
/ 04 августа 2010

В моем конкретном примере мне нужно передать ошибку, полученную на одном контроллере, на другой контроллер, где она будет отображаться.Вот контрольный пример, который я настроил.Я пробовал 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 ]

1 голос
/ 05 августа 2010

Так что, очевидно, есть что-то особенное в перенаправлении в корень сайта.Когда я изменил перенаправление с / home / index на другое действие, оно работало нормально.Только когда я перенаправил на него, мои ценности исчезли.

1 голос
/ 04 августа 2010

ОБНОВЛЕНИЕ: Во-первых, извините, но я все еще не могу получить ясную картину - при условии, что вы хотите получить данные в одном действии контроллера, передать их в действие другого контроллера и затем отобразить их в частичном представлении.Вы можете использовать Sessions, чтобы получить значения на другом контроллере так, как вы его сохранили .... но я думаю, что временные данные могут также работать в вашем случае ... затем для перенаправления -

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

Я думаю, вы должны прочитать о tempdata и viewdata подробнее здесь и не использовать ViewData, если вы не присвоили ему какое-то значение, которое я не вижу в вашем коде, и вы все еще используете его.

Tempdata хранит значение для запроса .... поэтому новый запрос означает, что он потеряет значения. Посмотрите на this , если вы хотите передавать значения с использованием tempdata.

Итак, в вашем случае, если вы хотите передать только строку, сделайте что-то вроде этого -

    public ActionResult New()
    {
        string str = "There was an error";
        return RedirectToAction("Index",str);
    }
    public ActionResult Index(string str)
    {
        Response.Write(str);
        return View();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...