首页 / ASP.NET Core / 正文

[ASP.NET Core Razor Pages系列教程]ASP.NET Core Razor Pages中的视图数据(ViewData)(11)

5706 发布于: 2018-12-05 读完约需9分钟

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,我们下节再见。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [ASP.NET Core Razor Pages系列教程]ASP.NET Core Razor Pages中的处理程序方法(Handler Methods)(10)

下一篇: sqlserver中判断数据表或临时表是否存在

本文永久链接码友网 » [ASP.NET Core Razor Pages系列教程]ASP.NET Core Razor Pages中的视图数据(ViewData)(11)

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册