我正在编辑一个项目,我看到一个控制器方法中的Session [“”]和另一个控制器方法中的TempData [“”]。 4之间是否有区别,还是只有4种方法可以做同样的事情。ViewData,ViewBag,Session,TempData的正确时间是什么
回答
- ViewData/ViewBag - 仅在当前请求期间有效。
您将其设置为控制器操作并在视图中使用它,然后消失。
区别在于第一个字典是字典,第二个字典只是一个dynamic
封装。
两者都指向相同的数据。
ViewBag在ASP.NET MVC 3推出
例子:
public ActionResult Index()
{
ViewData["foo"] = "bar";
return View();
}
和视图中,你可以使用这个值:
<div>@ViewData["foo"]</div>
同样的,ViewBag但它是动态:
public ActionResult Index()
{
ViewBag.foo = "bar";
return View();
}
and inside该视图中,您可以使用此值:
<div>@ViewBag.foo</div>
因此,大家可以看到的ViewData/ViewBag只是将信息传递给从比较经典的一个控制器动作视图的另一种方式,并建议其使用视图方式型号:
public class MyViewModel
{
public string Foo { get; set; }
}
然后:
public ActionResult Index()
{
var model = new MyViewModel { Foo = "bar" };
return View(model);
}
和你的强类型的视图中:
@model MyViewModel
<div>@Html.DisplayFor(x => x.Foo)</div>
正如您所看到的,使用视图模型提供了将信息从控制器操作传递到视图的强类型方法。
- TempData的 - 它允许用于单个后续请求的持续时间持续信息。你在TempData里存储一些东西,然后重定向。在重定向到的目标控制器操作中,您可以检索存储在TempData中的值。
例子:
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();
}
ASP.NET MVC将自动过期,已存储在TempData
一旦你读它的价值。在封面之下,ASP.NET MVC将信息保存到Session
中。
- 会议 - 同TempData的不同之处在于它永远不会到期 - 这将是适用于所有的请求,而不是一个单一的重定向。
ASP。net MVC引入了ViewData,ViewBag,TempData,Session来传递控制器之间的数据来查看。
的ViewData
ViewData的是通过使用存储在CurrentRequestContext的ViewDataDictionary类中实现。因此,ViewData生命周期将在当前请求结束时结束。
ViewBag也像ViewData,唯一不同的是它可以使用动态对象动态共享数据。
TempData的是一个非常短暂的情况下,你应该只在当前和随后请求,如果你想使用重定向(RedirectToAction,RedirectToRoute,重定向将内整合得心应手过程中使用它)在ASP.net MVC并在重定向之间传递一些数据。 TempData将数据存储在Session中,但框架在当前和后续请求结束时处理数据。
会议是长寿命(永不过期)属于用户session.You需要当您使用会话变量可以很容易地导致问题要留神数据。
protected void Session_Start(Object sender, EventArgs e)
{
int userType = 1;
HttpContext.Current.Session.Add("_SessionUserType",userType);
}
的ViewData:
- 是从
ViewDataDictionary
继承了一个特殊的字典。 - 用于从控制器发送数据以查看。
- 它的寿命是目前的要求。
- 如果您有
Redirect
,它将被销毁。 - 出于安全原因,最好在使用前检查它是否为
null
。 - 铸造应该为操作完成。
ViewBag:
是动态类型(这种类型的呈现在C#4)。
与
ViewData
一样用于将数据从控制器发送到视图。- 它在当前请求中的值的有效期限。
- 在页面间重定向时,其值将为空。
- 出于安全原因使用前,请检查它是否为
null
。 - 铸件没有必要,所以它比
ViewData
更快。
的TempData:
- 一种特别的字典从
TempDataDictionary
的。 - 它有短生命期,并用于发送页面之间的信息(
Redirect
)。 - 完全呈现
View
后,其值将为null
。 - 出于安全原因使用前,请检查它是否为
null
。 - 铸造应该为操作完成。
会议:
- 用于发送不同请求之间的信息。
- 它的值不是
null
非空值;除非在一定时间后(session expire
)。 - 出于安全原因使用前,请检查它是否为
null
。 - 铸造应该为操作完成。
This文章解释了ViewData,ViewBag和TempData之间的区别。我希望你可以根据你的需要参考这篇文章。
- 1. 生命期:ViewBag,TempData,ViewData和Session
- 2. ViewBag,ViewData,TempData,Session - 如何以及何时使用它们?
- 3. 正确地传递复杂对象不使用的TempData/ViewBag/ViewData的
- 4. 如何增加Viewdata和Tempdata的时间?
- 5. ViewData中的数据持续时间tempData
- 6. 如果ViewData有ViewData,那么为什么TempData没有TempBag?
- 7. 在这种情况下有什么更好的? ViewBag或TempData或Session?
- 8. 什么时候使用ViewData而不是ViewModels是正确的?
- 9. 呼叫ViewBag,ViewData的,TempData的外部JS文件
- 10. 的ViewData VS ViewBag
- 11. 的TempData和ViewData的之间型差分
- 12. ViewData和TempData之间的区别?
- 13. ASP.NET MVC ViewBag或TempData?
- 14. 什么时候在ASP.NET MVC中使用ViewBag/ViewData“可以接受”?
- 15. 如果在web配置中禁用会话状态MVC中的ViewBag,ViewData和Tempdata会产生什么影响
- 16. ASP.NET MVC ViewBag/TempData安全
- 17. ViewBag/ViewData生命周期
- 18. 确定Azure VM启动时间的正确方法是什么?
- 19. Asp.net-MVC中的Session和ViewData有什么区别?
- 20. 什么时候释放对象是正确的时间?
- 21. 如何分配使用TempData的或ViewBag
- 22. 什么是MySQL中的SESSION?
- 23. 什么是缓存的正确信息?什么是页面加载时间?
- 24. 将视图返回给MVC4中的iframe时,viewbag,viewdata或tempdata不会将信息传递回整个视图。
- 25. 为什么时间计算不正确?
- 26. JavaScript中提取tempdata或viewdata值?
- 27. 按时间排序的正确方法是什么?
- 28. 为什么这不是在正确的时间打断?
- 29. 什么是正确的语法在MailChimp API“时间表” 3.0
- 30. URI中OData v4持续时间的正确语法是什么?
你可以叫'保持()'取消标记TempData的价值为过期 'TempData.Keep( “富”);'让 “foo” 的值 'TempData.Keep();'保留的所有值TempData – nomail
我很难看到tempdata的用例。难道你没有通过使用foo值成为一个需求,因此它不应该只是一个参数吗?不知道。我觉得它闻起来。更多,如果你开始.Keep() - 你的tempdata中的东西... –
会话永不过期? MVC中的会话变量是否与Web表单中的工作不同?还是默认设置为永不过期? – pqsk