如何从HttpContext访问ViewData?(ASP.Net MVC)

8

我不确定这是否是正确的方法,如果需要,请纠正问题。

我需要通过完整的页面生命周期访问一个我想创建一次的对象。我考虑使用ViewData,但我所有访问上下文信息的扩展方法都使用HttpContextBase,并认为在这种情况下也应该如此。

我应该这样做吗?

3个回答

21

是的,Ben,我想到了,但由于它没有setter,我犯了忽略多次的错误。回家后会确认它是否有效并加以标记。 - Fabio Milheiro
1
是的,它只是一个字典,所以 httpContext.Items["foo"] 将工作正常。 - Ben Foster
是的,不需要真正测试!顺便问一下,你知道使用ViewData而不是HttpContextBase.Items的优点是什么吗? - Fabio Milheiro
在ASP.NET MVC的上下文中,ViewData更容易使用。如果可用,我建议使用它。此外,ViewBag在幕后使用ViewData。 - Ben Foster

4
使用@ViewContext.Controller.ViewData来访问当前控制器的ViewData。假设您想从您当前所在的视图中提取它。看到一个用例会很有帮助。 ViewDataWebViewPage的一部分,不是可以从HttpContextBase本身访问的东西。
阅读其他答案中您的评论后,您可以使用HttpContext.Current.Items创建仅对当前请求可用的项。

谢谢BuildStart,但我正在寻找的答案(可能是不可能的)是如何从HttpContext访问ViewData +1。 - Fabio Milheiro
2
@Fabio - 你不能这样做。HttpContextASP.NET 的,但 ViewDataASP.NET MVC 的。这就是为什么 MVC 实现了 ViewContext 来包装 HttpContext - RPM1984
谢谢@RPM19841。非常清晰易懂! - Fabio Milheiro

-3

你可以使用Session来存储信息并使其可用。

HttpContext.Current.Session

1
是的,没错,但这里的目的是仅在一个页面生命周期内拥有该对象(而不必在每个页面请求上创建、删除或覆盖它,尽管目前似乎只有这个选项)。 - Fabio Milheiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接