Asp.Net MVC 5 tempdata не работает

Я изучаю ASP.net MVC5 с кодом в книге.

public ActionResult DemoTempData()
{
    ViewData["Msg1"] = "From ViewData Message.";
    ViewBag.Msg2 = "From ViewBag Message.";
    TempData["Msg3"] = "From TempData Message.";
    return RedirectToAction("Redirect1");
}

public ActionResult Redirect1()
{
    TempData["Msg4"] = TempData["Msg3"];
    return RedirectToAction("GetRedirectData");
}

public ActionResult GetRedirectData()
{
    return View();
}

GetRedirectData Посмотреть:

@{
    ViewBag.Title = "GetRedirectData";
}

<h2>GetRedirectData</h2>
<ul>
    <li>ViewData-Msg1:@ViewData["Msg1"]</li>
    <li>ViewBag-Msg2:@ViewBag.Msg2</li>
    <li>TempData-Msg3:@TempData["Msg3"]</li>
    <li>TempData-Msg4:@TempData["Msg4"]</li>
</ul>

я знаю это ViewData а также ViewBag не будет передавать значение. Msg3 а также Msg4 вид должен иметь значение, но это не так. Я проверяю значение в Redirect1(), Оказывается, что Msg3 является null,
Я очень смущен тем, что происходит.

2 ответа

ASP.NET MVC TempData хранит свой контент в состоянии сеанса. Таким образом, TempData уничтожается сразу после использования в последующем HTTP-запросе.

В вашем случае вы назначаете TempData["Msg3"] для TempData["Msg4"]. Поэтому, когда вы используете содержимое из TempData["Msg3"], оно уничтожается. Поэтому, когда вы пытаетесь получить доступ к TempData["Msg3"], вы получаете нулевое значение.

Методы Peek и Keep позволяют вам читать значение без разрушения.

ссылка:

https://msdn.microsoft.com/enus/library/system.web.mvc.tempdatadictionary.peek(v=vs.118).aspx

object value = TempData["value"];

TempData.Keep("value");

object value = TempData["value"];

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

System.Web.HttpContext

что на самом деле текущий запрос

сохранить использование (пример)

System.Web.HttpContext.Current.Session["Msg3"] =  StringOfIds;

Чтобы получить...

string msg3= (string) System.Web.HttpContext.Current.Session["Msg3"]; 
Другие вопросы по тегам