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"];