ASP.NET Core Razor Pages中的视图数据(ViewData)
ASP.NET Core Razor Pages中如何使用ViewData?
对于.NET开发者,特别是使用过ASP.NET MVC的.NET开发者来说,ViewData
并不算一个新的名词。ASP.NET Core Razor Pages应用程序中的ViewData
与ASP.NET MVC中的ViewData
基本相同,都是作为一个传递数据的容器来使用。在Razor Pages应用程序中,ViewData
是将PageModel类中的数据传递到Razor视图页面而已。
ViewData
实际是一个字典,字典的键是可以自定义的字符串,字典的值是一个对象(object)。比如我们可以像下面的示例一样在PageModel中定义一些ViewData
数据,如:
public class IndexModel : PageModel
{
public void OnGet()
{
ViewData["Age"] = 28;
ViewData["Name"] = "Rector";
ViewData["Profile"] = new Profile {
Name = "Rector"
Age = 28
Password = "123456",
Address = new Address { City = "ChongQing"},
};
}
}
在对应的Razor视图页面中,我们可以根据键名直接使用已经在PageModel中定义的ViewData数据,如:
@page
@model IndexModel
@{
}
<h2>My name is @(ViewData["Name"]).</h2>
<p>I'm @ViewData["Age"] year-old. </p>
如果是ViewData中存储的是复杂的对象,则需要强制转换成对应的数据类型,如:
@page
@model IndexModel
@{
var profile = (Profile)ViewData["Profile"];
}
<h2>My name is @profile.Name</h2>
<p>I'm @profile.Age year-old.</p>
<p>My login passwrod is @profile.Password</p>
<p>I'm from @profile.Address.City</p>
ViewData属性
与ASP.NET MVC使用ViewData不同的是,在ASP.NET Core 2.1及以上的版本中,我们还可以在PageModel的属性成员上使用ViewData
的属性类来标识当前属性是一个ViewData。属性的名称将对应ViewData的键名,属性的值对应ViewData的值,比如:
Index.cshtml.cs:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace RazorPagesDemoApplication.Pages.ViewData
{
public class IndexModel : PageModel
{
[ViewData]
public string Message { get; set; }
public void OnGet()
{
Message = "Hi,Rector";
}
}
}
注:
ViewData
属性类位于命名空间using Microsoft.AspNetCore.Mvc
,在使用前需引用。
然后我们可以在Razor视图文件中使用@ViewData["Message"]
来获取ViewData传递的数据,同时也可以使用@Model.Message
模型对象来获取数据,如下:
Index.cshtml:
@page
@model RazorPagesDemoApplication.Pages.ViewData.IndexModel
@{
Layout = null;
}
<p>@Model.Message</p>
<p>@ViewData["Message"]</p>
两种方式获取到的数据是一致的。
在部分视图中获取ViewData传递的数据
与Razor视图页面相同,在部分视图(Partial Views)中我们也可以使用ViewData,这里的ViewData是引用这个部分视图的父页面传递过来的,比如还是以上面的Index.cshtml视图为例,在其中引用部分视图:
Index.cshtml:
@page
@model RazorPagesDemoApplication.Pages.ViewData.IndexModel
@{
Layout = null;
}
<p>@Model.Message</p>
<p>@ViewData["Message"]</p>
<partial name="Partials/_ViewDataPartial" />
定义部分视图:
[/Pages/Shared/Partials/_ViewDataPartial.cshtml]:
<p>Message from ViewDataPartial, content:@ViewData["Message"]</p>
页面渲染后的HTML代码为:
<p>Hi,Rector</p>
<p>Hi,Rector</p>
<p>Message from ViewDataPartial, content:Hi,Rector</p>
好了,本节ASP.NET Core Razor Pages的ViewData的内容就为大家介绍到这里了。
我是Rector,我们下节再见。
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册