Использование Tempdata в ASP.NET MVC - Лучшая практика

Я использую ASP.NET MVC 3 для создания веб-приложения.

То, что я пытаюсь сделать, это передать значения между двумя контроллерами, хотя есть много способов сделать это. Меня особенно интересует использование TempData для этого.

public ActionResult Action1()
{
    string someMessage;
    Test obj = SomeOperation();
    if(obj.Valid)
    {
        someMessage = obj.UserName;
    }
    else
    {
        someMessage = obj.ModeratorName;
    }

    TempData["message"] = someMessage;

    return RedirectToAction("Index");
}

public ActionResult Index()
{
    ViewBag.Message = TempData["message"]

    return View();
}

Так верно ли использование TempData здесь? Я имею в виду, что при использовании лучших методов программирования это правильный способ использования TempData?

В каких случаях в реальном времени следует использовать TempData?

Примечание: Я просмотрел следующие ссылки

Спасибо

Ответ 1

TempData - это ведро, в котором вы можете сбросить данные, которые необходимы только для следующего запроса. То есть все, что вы помещаете в TempData, отбрасывается после завершения следующего запроса. Это полезно для разовых сообщений, таких как ошибки проверки формы. Важно отметить, что это относится к следующему запросу в сеансе, так что запрос может произойти в другом окне браузера или вкладке.

Чтобы ответить на ваш конкретный вопрос: нет правильного способа его использования. Все это до удобства и удобства. Если это работает, имеет смысл, а другие понимают его относительно легко, это хорошо. В вашем конкретном случае передача параметра таким образом прекрасна, но странно, что вам нужно это сделать (запах кода?). Я бы предпочел сохранить такое значение в ресурсах (если это ресурс) или в базе данных (если это постоянное значение). Из вашего использования это похоже на ресурс, поскольку вы используете его для названия страницы.

Надеюсь, что это поможет.

Ответ 2

Обратите внимание, что в MVC 3 изменилось поведение сохранения TempData, теперь значение в TempData сохраняется до тех пор, пока оно не будет прочитано, а не только для следующего запроса.

Значение TempData сохраняется до тех пор, пока оно не будет прочитано или до сеанса время вышло. Сохраняющиеся TempData таким образом позволяют сценарии, такие как перенаправление, поскольку значения в TempData доступны за пределами один запрос. https://msdn.microsoft.com/en-in/library/dd394711%28v=vs.100%29.aspx

Ответ 3

Просто помните о сохранении TempData, это немного сложно. Например, если вы даже просто прочитали TempData внутри текущего запроса, он будет удален и, следовательно, у вас его нет для следующего запроса. Вместо этого вы можете использовать метод Peek. Я бы рекомендовал прочитать эту классную статью:

MVC Tempdata, Peek и сохраняйте путаницу