asp.net core mvc中的viewdata和viewbag的用法

发布时间:2024年01月04日

在ASP.NET Core MVC中,ViewDataViewBag都是用于在控制器中传递数据给视图的方式,但它们在实现上有一些区别。

ViewData是一个ViewDataDictionary对象,它是一个字典,可以通过键值对的方式传递数据。你可以像这样在控制器中设置ViewData

public IActionResult Index()
{
    ViewData["Message"] = "Hello, World!";
    return View();
}

然后在视图中使用ViewData来获取这个值:

<h1>@ViewData["Message"]</h1>

ViewData只能存储动态类型的数据,因此在视图中使用时需要进行强制类型转换。

ViewBag是一个动态属性,它允许你在控制器中动态地设置属性并在视图中使用。你可以像这样使用ViewBag

public IActionResult Index()
{
    ViewBag.Message = "Hello, World!";
    return View();
}

然后在视图中使用ViewBag来获取这个值:

<h1>@ViewBag.Message</h1>

ViewBag不需要使用强制类型转换,因为它是动态类型的。

总的来说,ViewDataViewBag都是用于在控制器和视图之间传递数据的方式,选择使用哪种方式主要取决于你的个人偏好和具体的应用场景。

当在控制器中传递数据给ViewDataViewBag时,它们也可以传递复杂类型的数据,如对象或集合。

在控制器中通过ViewData传递对象的示例:

public IActionResult Index()
{
    var user = new User { Name = "John", Age = 25 };
    ViewData["UserInfo"] = user;
    return View();
}

在视图中通过ViewData获取对象的示例:

<h1>@((User)ViewData["UserInfo"]).Name</h1>
<p>@((User)ViewData["UserInfo"]).Age</p>

在控制器中通过ViewBag传递对象的示例:

public IActionResult Index()
{
    var user = new User { Name = "John", Age = 25 };
    ViewBag.UserInfo = user;
    return View();
}

在视图中通过ViewBag获取对象的示例:

<h1>@((User)ViewBag.UserInfo).Name</h1>
<p>@((User)ViewBag.UserInfo).Age</p>

注意,当使用ViewDataViewBag传递复杂类型的数据时,需要在视图中进行类型转换。

另外,需要注意的是,ViewDataViewBag都是短暂存储数据的方式,它们只存在于当前请求的生命周期内。如果需要在多个请求之间传递数据,可以考虑使用TempDataSession

文章来源:https://blog.csdn.net/weixin_45342302/article/details/135385481
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。