65.9K
CodeProject 正在变化。 阅读更多。
Home

在 ASP.NET MVC 中使用 ViewData、ViewBag、TempData、Session 变量传递数据

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.14/5 (8投票s)

2018年1月5日

CPOL

3分钟阅读

viewsIcon

15851

在 ASP.NET Web 应用程序中,我们熟悉数据传递和状态管理机制,如 Session、ViewState、hiddenfield 等。但在 ASP.NET MVC 应用程序中,我们有 ViewData、ViewBag、TempData、Session 变量。

引言

在本文中,我们将学习在 ASP.NET MVC 中使用 ViewData、ViewBag、TempData、Session 变量传递数据

背景

在 ASP.NET Web 应用程序中,我们熟悉数据传递和状态管理机制,如 Session、ViewState、hidden fields 等。但在 ASP.NET MVC 应用程序中,我们没有可用的服务器控件,因此没有 ViewState 或 hidden fields。

 

使用代码

在 ASP.NET Web 应用程序中,我们熟悉数据传递和状态管理机制,如 Session、viewstate、hiddenfield 等。但在 ASP.NET MVC 应用程序中,我们没有可用的服务器控件,因此没有 viewstate 或 hiddenfield。

为了在 ASP.NET MVC 中从 Controller 向 View 传递数据,我们有 ViewDataViewBag

程序集:System.Web.Mvc.DynamicViewDataDictionary

让我们实际理解 ViewData/ViewBag 的概念和用法。

创建一个新的 MVC 应用程序,并选择 Empty 模板,如下面的屏幕截图所示



现在,右键单击 Controller 文件夹,添加,然后单击控制器并在您的应用程序中添加 'HomeController'

选择 'MVC 5 controller - Empty'

 

现在,为 'HomeController' 添加 View,为此,右键单击 Action Method Index,然后单击 'Add View'

 

 

在下面的屏幕截图中,将 'View name' 命名为 'Index',然后单击 'OK'。

现在在您的 ActionResult Index 中编写以下代码。

在 View 'Index' 中访问 ViewData,如下面的屏幕截图所示

 

通过运行应用程序来测试您的数据,它将显示您从 Controller 传递到 View 的消息。

 

现在,同样的方式,我们可以使用 ViewBag 从 Controller 向 View 传递数据。

 

ViewBag 语法比 ViewData 更容易,无需编写额外的 [] 括号,它很简单,所以现在在您的 'Homecontroller' 中编写以下代码

ViewBag.MyData = "This is ViewBag Example.";  

并从 View 'Index' 调用 ViewBag,编写以下代码。

<h1>@ViewBag.MyData</h1> 

通过运行您的应用程序来检查您的代码。

 

 

如果想要将数据从一个 action 传递到另一个 action 怎么办?ViewData 或 ViewBag 在这里不起作用,它不维护 action 到 action 的数据,因此您需要 TempData

使用 TempData,我们可以将数据从一个 controller 传递到另一个 controller,TempData 在 HTTP 请求期间保持该值。使用 Return RedirectToAction("TempDataEx"),我们可以从一个 action 重定向到另一个 action。

public class HomeController : Controller  
   {  
       // GET: Home  
       public ActionResult Index()  
       {  
          //ViewData["Msg"] = "This is ViewData Example.";  
          // ViewBag.MyData = "This is ViewBag Example.";  
           
           TempData["TempModel"] = "This is TempData Example";  
           return RedirectToAction("TempDataEx");  
          // return View();  
       }  
  
       public ActionResult TempDataEx()  
       {  
             
           return View();  
       }  

添加新的 View 'TempDataEx' 并在该 view 中访问 TempData["TempModel"] 值。

 

这里我们已经将数据从 Index Controller 传递到 TempDataEx Controller。

 

让我们检查 Session,它的工作方式与 ASP.NET session 相同,并维护数据直到您关闭浏览器。现在在 Index Method 中设置 session 并在 view Index 和 TempDataEx 中访问。

运行应用程序并检查两个 View。

 

 

 

您可以在两个 view 中获取 session 数据。

关注点

ViewDataViewBag: 您可以将数据从 Controller 传递到 View 以进行第一次请求。ViewData 和 ViewBag 之间的区别是,

  • ViewData 的语法易于使用,ViewBag 使用了名为 Dynamic 的 C# 4 功能。
  • ViewData 需要类型转换并检查空值,ViewBag 不需要类型转换。

我们不能使用 ViewData 和 ViewBag 从 Action 传递数据到 Action。

TempData: 您可以将数据从一个 controller 传递到另一个 controller 或 Action 到 Action。

Session:您可以维护数据直到关闭浏览器。它与 ASP.NET Session 相同。

在 MVC 中明智地选择数据传递方法非常重要,不要一直使用 Session 来传递数据。

历史

这是我在 CodeProject 上的第一篇文章,希望您喜欢。

© . All rights reserved.