【问题标题】:TempData in Asp.net MVC is not working exactly the same as session in Asp.net?Asp.net MVC 中的 TempData 与 Asp.net 中的会话不完全相同?
【发布时间】:2013-08-30 06:52:56
【问题描述】:

我在 MVC 应用程序中使用 TempData[],但它不能像那个会话那样正常工作。

登录页面后刷新页面后,临时数据有空值请建议我和 也使用web.config

<sessionState mode="InProc" timeout="10"/>.

【问题讨论】:

标签: c# asp.net-mvc asp.net-mvc-3


【解决方案1】:

TempData 仅可用于用户的会话,因此它只会持续到我们读取它并在 HTTP 请求结束时被清除。适合使用 TempData 的场景是数据需要在两个请求之间持久存在时——重定向场景。您可以使用方法 Keep 存储直到下一个请求

   TempData.Keep

http://msdn.microsoft.com/en-us/library/ee703497.aspx

要从控制器填充数据,请创建操作:

public ActionResult GetData()
{
   // get data from your data source, replace with db call or where to get data
   var data = new [] {"sample1", "sample2"};

   return Json(data, JsonRequestBehavior.AllowGet);
}

当您需要数据时在客户端:

$.getJSON(@Url.Action("GetData"), function(data) {
   // fill dropdown instead alert
   alert(data);
});

查看更多:

AJAX request aspnet

similar question but for post

【讨论】:

  • 感谢 Syned,它工作正常。但我还有一个与会话价值相关的问题。如何将会话管理到通用处理程序类中?
  • “进入通用处理程序类”是什么意思?请描述您的用例。
  • 继承“IHttpHandler”接口的http web请求的通用处理程序。
  • 大多数时候你的 mvc 应用程序中不需要处理程序,为什么需要它?
  • 通用处理程序用于使用 jquery 填充下拉列表。
【解决方案2】:

刷新后它应该为空,因为 TempData 仅用于单个重定向。在您的情况下,您必须改用 Session。

【讨论】:

  • 是的,您在刷新页面或单次重定向 TempData 后会丢失数据。但我认为会话在 MVC 应用程序中不是好方法
  • TempData 使用会话。
【解决方案3】:

您可以将数据存储在会话中。

例如

 public static int Points
        {
            get
            {
                int points = Convert.ToInt32( HttpContext.Current.Session["PointssessionKey"]); 
                return  points;
            }
            set
            {
                HttpContext.Current.Session["PointssessionKey"] = value;
            }
        }

并将临时数据保存为

TempData.Keep

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2012-02-17
    • 1970-01-01
    • 2021-10-12
    • 2010-12-02
    相关资源
    最近更新 更多