MrM*_*MrM 42 asp.net-mvc session-variables
我正在编辑一个项目,我在一个控制器方法中看到了一个Session [""],在另一个控制器方法中看到了TempData [""].4之间是否存在差异,或者只是4种方式来做同样的事情.
Dar*_*rov 79
dynamic这个字典的包装.例:
public ActionResult Index()
{
ViewData["foo"] = "bar";
return View();
}
Run Code Online (Sandbox Code Playgroud)
在视图中,您可以使用此值:
<div>@ViewData["foo"]</div>
Run Code Online (Sandbox Code Playgroud)
与ViewBag相同,但它是动态的:
public ActionResult Index()
{
ViewBag.foo = "bar";
return View();
}
Run Code Online (Sandbox Code Playgroud)
在视图中,您可以使用此值:
<div>@ViewBag.foo</div>
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到,与使用视图模型的经典和推荐方式相比,ViewData/ViewBag只是将信息从控制器操作传递到视图的另一种方法:
public class MyViewModel
{
public string Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后:
public ActionResult Index()
{
var model = new MyViewModel { Foo = "bar" };
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
在强类型视图中:
@model MyViewModel
<div>@Html.DisplayFor(x => x.Foo)</div>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,使用视图模型提供了一种强类型方法,可以将信息从控制器操作传递到视图.
例:
public ActionResult Foo()
{
TempData["foo"] = "bar";
return RedirectToAction("bar");
}
public ActionResult Bar()
{
var value = TempData["foo"] as string;
// use the value here. If you need to pass it to the view you could
// use ViewData/ViewBag (I can't believe I said that but I will leave it for the moment)
return View();
}
Run Code Online (Sandbox Code Playgroud)
TempData一旦您阅读它,ASP.NET MVC将自动使存储的值到期.ASP.NET MVC将信息保存在Session.
ASP.net MVC引入了ViewData,ViewBag,TempData,Session来在控制器之间传递数据来查看.
ViewData的
ViewData是使用存储在CurrentRequestContext中的ViewDataDictionary类实现的.因此,ViewData生命周期将在当前请求结束时结束.
ViewBag也像ViewData一样,唯一的区别是它可以使用动态对象动态共享数据.
TempData是一个非常短暂的实例,您只应在当前和后续请求期间使用它.如果您想在ASP.net MVC中使用重定向(RedirectToAction,RedirectToRoute,Redirect)并传递一些数据,这将非常方便重定向之间.TempData在Session中存储数据,但框架在当前和后续请求结束时处理数据.
会话是属于用户会话的长期(永不过期)数据.当您使用会容易导致问题的会话变量时,您需要注意.
protected void Session_Start(Object sender, EventArgs e)
{
int userType = 1;
HttpContext.Current.Session.Add("_SessionUserType",userType );
}
Run Code Online (Sandbox Code Playgroud)
查看数据:
ViewDataDictionary.Redirect。null在使用前检查它。查看包:
是动态类型(该类型在 c#4 中出现)。
LikeViewData用于将数据从控制器发送到视图。
null.ViewData.临时数据:
TempDataDictionary.Redirect)。View完全渲染后,其值为null。null.会议:
null不是空值;除非经过一段时间(session expire)。null.这篇文章解释了 ViewData、ViewBag 和 TempData 之间的区别。我希望您可以根据需要参考这篇文章。
| 归档时间: |
|
| 查看次数: |
39949 次 |
| 最近记录: |