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






2.14/5 (8投票s)
在 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 传递数据,我们有 ViewData 和 ViewBag。
程序集: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 数据。
关注点
ViewData 和 ViewBag: 您可以将数据从 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 上的第一篇文章,希望您喜欢。