Использование 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 использоваться ?

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

спасибо

3 59

3 ответа:

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

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

Надежда эта помощь.

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

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

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

MVC Tempdata, заглянуть и сохранить путаницу