个性化阅读
专注于IT技术分析

asp.net mvc ViewData、ViewBag和TempData

本文概述

ASP.NET MVC提供了三个变量来存储值并将值从控制器传递到视图。除了具有其他功能的TempData外,ViewData和ViewBag都相似。

我们将通过示例讨论每个。


ASP.NET MVC ViewData

它是对象的字典,并从ViewDataDictionary类派生。我们可以通过使用字符串作为键来访问值。它是类型安全的,并且需要对数据类型进行类型转换。这样可以避免错误,并在运行时检查空引用。仅在当前请求期间可以访问。

我们正在创建一个控制器并将视图返回到浏览器。该控制器将Courses ViewData传递给视图。

控制者

using System;
using System.Collections.Generic;
using System.Web.Mvc;
namespace ViewBagExample.Controllers
{
    public class ViewBagController : Controller
    {
        // GET: ViewBag
        public ActionResult Index()
        {
            List<string> Courses = new List<string>();
            Courses.Add("J2SE");
            Courses.Add("J2EE");
            Courses.Add("Spring");
            Courses.Add("Hibernates");
            ViewData["Courses"] = Courses;
            return View();
        }
    }
}

视图

// Index.cshtml

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <h2>List of Courses</h2>
    <ul>
        @{
            foreach (var Courses in ViewData["Courses"] as List<string>)
            {
                <li> @Courses</li>
            }
        }
    </ul>
</body>
</html>

输出:

它将以下输出输出到浏览器。


ASP.NET MVC ViewBag

这是一个动态属性,类似于ViewData。它是在.NET Framework 4.0版中引入的。它用于将数据从控制器发送到视图页面。 ViewBag可以动态获取和设置值,因此将其称为动态属性。它不需要类型转换,也不需要动态转换类型。

在这里,在此示例中,我们正在实现ViewBag属性。控制器和索引文件如下。

控制者

using System;
using System.Collections.Generic;
using System.Web.Mvc;
namespace ViewBagExample.Controllers
{
    public class ViewBagController : Controller
    {
        // GET: ViewBag
        public ActionResult Index()
        {
            List<string> Courses = new List<string>();
            Courses.Add("J2SE");
            Courses.Add("J2EE");
            Courses.Add("Spring");
            Courses.Add("Hibernates");
            ViewBag.Courses = Courses;
            return View();
        }
    }
}

视图

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <h2>List of Courses</h2>
    <ul>
        @{
            foreach (var Courses in ViewBag.Courses)
            {
                <li> @Courses</li>
            }
        }
    </ul>
</body>
</html>

输出:

索引文件将以下输出输出到浏览器。


ASP.NET MVC TempData

它代表一组仅在一个请求到下一个请求之间持续存在的数据。它是从TempDataDictionary派生的,我们可以像在ViewData中一样使用其对象来传递数据。 TempData的值仅在一个请求到下一个请求之间持续存在。保留用于标记密钥以保留数据,以便可以为下一个请求保留。

我们还可以使用TempData将数据从一个动作传递到另一个动作。让我们来看一个例子。

控制者

// TempDataController.cs

using System;
using System.Collections.Generic;
using System.Web.Mvc;
namespace ViewBagExample.Controllers
{
    public class ViewBagController : Controller
    {
        // GET: ViewBag
        public ActionResult Index()
        {
            List<string> Courses = new List<string>();
            Courses.Add("J2SE");
            Courses.Add("J2EE");
            Courses.Add("Spring");
            Courses.Add("Hibernates");
            TempData["Courses"] = Courses;
            return View();
        }
    }
}

视图

// Index.cshtml

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <h2>List of Courses</h2>
    <ul>
        @{
            foreach (var Courses in TempData["Courses"] as List<string>)
            {
                <li> @Courses</li>
            }
        }
    </ul>
</body>
</html>

输出:

该索引文件将以下输出输出到浏览器。

赞(0)
未经允许不得转载:srcmini » asp.net mvc ViewData、ViewBag和TempData

评论 抢沙发

评论前必须登录!