ZetCode

ASP.NET ViewBag

最后修改于 2023 年 10 月 18 日

在本文中,我们将展示如何在ASP.NET中使用ViewBag在控制器和视图之间传递数据。

ASP.NET 是一个跨平台、高性能、开源的框架,用于构建现代、支持云的 Web 应用程序。它由 Microsoft 开发。

控制器是一个处理客户端发送的HTTP请求的类。它检索模型数据并向客户端返回响应。视图显示数据并处理用户交互。

ViewBag是一个控制器属性,用于将数据从控制器传递到视图。它用于传递弱类型数据。ViewBag适用于在控制器和视图之间传递少量数据。

如果要传递强类型数据,可以使用ViewModel。

ASP.NET ViewBag示例

在下面的示例中,我们将展示如何使用ViewBag。

Program.cs
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();

var app = builder.Build();

app.UseRouting();
app.UseEndpoints(endppoints =>
{
    endppoints.MapDefaultControllerRoute();
});

app.Run("https://:3000");

我们设置控制器和视图。

Controller/HomeController.cs
using Microsoft.AspNetCore.Mvc;

namespace ViewBagEx.Controllers;

public class HomeController : Controller
{
    public IActionResult Index()
    {
        ViewBag.Now = DateTime.Now;

        return View();
    }

    [HttpGet("words")]
    public IActionResult Words()
    {
        var words = new List<string> { "red", "class", "rock", "war" };
        ViewBag.Words = words;
        
        return View();
    }
}

在控制器中,我们有两个操作。第一个返回当前日期和时间,第二个返回单词列表。

ViewBag.Now = DateTime.Now;

我们将当前日期和时间设置到ViewBag。

var words = new List<string> { "red", "class", "rock", "war" };
ViewBag.Words = words;

这里我们设置了一个字符串列表。

Views/Home/Index.cshtml
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home page</title>
</head>
<body>

    <p>
        @ViewBag.Now
    </p>
    
</body>
</html>

在此视图中,我们显示当前日期和时间。我们通过@ViewBag访问bag。

Views/Home/Words.cshtml
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Words</title>
</head>
<body>

    <ul>
        @{
            foreach (var word in ViewBag.Words)
            {
                <li>@word</li>
            }
        }
    </ul>
</body>
</html>

在此视图中,我们在HTML列表中显示单词。我们在foreach循环中遍历单词列表。

$ dotnet watch

我们启动应用程序并导航到localhost:3000localhost:3000/words

在本文中,我们展示了如何使用ViewBag在控制器和视图之间传递数据。

作者

我的名字是Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从2007年开始撰写编程文章。至今,我已撰写了1400多篇文章和8本电子书。我在教授编程方面拥有十多年的经验。

列出所有 ASP.NET 教程