ZetCode

ASP.NET ViewData

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 ViewData 字典。ViewData 是在 MVC 应用程序中将数据从控制器传递到视图的基本机制。

ASP.NET MVC 提供了多种在控制器和视图之间传输数据的方法。ViewData 是可用的最简单、最直接的方法之一。

基本定义

ViewData 是一个派生自 ViewDataDictionary 类的字典对象。它允许在请求-响应周期中将数据从控制器传递到视图。

ViewData 字典使用字符串键来存储和检索数据。数据仅在当前请求期间可访问,并在请求结束时清除。

由于 ViewData 存储的是对象,因此在检索值时需要进行类型转换。它非常适合不需要复杂模型绑定的少量数据。

ASP.NET ViewData 示例

以下示例演示了如何在 ASP.NET MVC 应用程序中使用 ViewData。

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

var app = builder.Build();

app.UseStaticFiles();
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();

这设置了一个基本的 ASP.NET MVC 应用程序。AddControllersWithViews 方法启用了带有视图支持的 MVC。默认路由映射到 HomeController。

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

public class HomeController : Controller
{
    public IActionResult Index()
    {
        ViewData["Title"] = "Welcome to our Store";
        ViewData["Message"] = "Today's special offers:";
        
        var products = new List<string> 
        { 
            "Laptop - 15% off", 
            "Smartphone - 10% off", 
            "Headphones - 20% off" 
        };
        
        ViewData["Products"] = products;
        ViewData["DiscountDate"] = DateTime.Now.AddDays(1);
        
        return View();
    }
}

控制器设置了几个 ViewData 值:一个标题字符串、一个消息字符串、一个产品列表和一个折扣到期日期。这些值将在相应的视图中可用。

Views/Home/Index.cshtml
@{
    Layout = "_Layout";
}

<h2>@ViewData["Title"]</h2>
<p>@ViewData["Message"]</p>

<ul>
@foreach (var product in (List<string>)ViewData["Products"])
{
    <li>@product</li>
}
</ul>

<p>
    Offers valid until: 
    @(((DateTime)ViewData["DiscountDate"]).ToString("MMMM dd, yyyy"))
</p>

视图检索并显示所有 ViewData 值。请注意,产品列表和 DateTime 值需要显式转换。标题和消息直接显示。

此示例展示了 ViewData 在处理不同数据类型方面的灵活性。但是,请记住 ViewData 值不是强类型的,如果转换不正确,可能会导致运行时错误。

来源

Microsoft ASP.NET MVC Views 文档

在本文中,我们探讨了 ASP.NET 8 中的 ViewData 字典。这个简单而强大的功能使得控制器和视图之间的数据传输变得容易。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 ASP.NET 教程