Asp.Net mvc 5 tempdata不起作用

时间:2017-08-21 09:57:10

标签: asp.net-mvc 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>

我知道ViewDataViewBag不会传递价值。 视图中的Msg3Msg4应该有值,但事实并非如此。 我检查Redirect1()中的值,结果Msg3null 我对正在发生的事情感到很困惑。

2 个答案:

答案 0 :(得分:3)

ASP.NET MVC TempData将其内容存储在Session状态中。因此,TempData在后续HTTP请求中使用后立即被销毁。

在您的情况下,您要将TempData [&#34; Msg3&#34;]分配给TempData [&#34; Msg4&#34;]。因此,一旦您使用TempData [&#34; Msg3&#34;]中的内容,它就会被销毁。因此,每当您尝试访问TempData [&#34; Msg3&#34;]时,您将获得空值。

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

答案 1 :(得分:-3)

控制器中的

使用内置的Session管道,它会一直存在,直到你将其销毁。我喜欢它,因为它总是有效,而且很容易。它可以在

中找到
var conn = new Client();

conn.on('ready', function() {
  console.log('Client :: ready');

  conn.shell(function(err, stream) {
    if (err) throw err;

    stream.on('close', function() {
      console.log('Stream :: close');

      conn.end();
    }).on('data', function(data) {
      console.log('STDOUT: ' + data);
    }).stderr.on('data', function(data) {
      console.log('STDERR: ' + data);
    });

    stream.end('ls -l\nexit\n');
  });
}).connect({
  host: '192.168.100.100',
  port: 22,
  username: 'frylock',
  privateKey: require('fs').readFileSync('/here/is/my/key')
});

这实际上是当前的请求

保存使用(示例)

System.Web.HttpContext

要检索...

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