页面模型 PageModel

Razor页面中的程序处理方法

OnGet 和 OnGetAsync是同样的处理程序,因此不能共存,否则会报错。

视图数据 ViewData

视图数据是从页面模型向内容页面传递数据的容器。视图数据是以字符串为键的对象字典。

public class IndexModel : PageModel
{

    public void OnGet()
    {
        ViewData["MyNumber"] = 42;
        ViewData["MyString"] = "Hello World";
        ViewData["MyComplexObject"] = new Book { 
                                    Title = "Sum Of All Fears",  
                                    Author = new Author { Name = "Tom Clancy" },
                                    Price = 5.99m
                                    };
    }
}

视图数据字典自动传给内容页面,在页面中使用引用对应的键即可。

@page
@model IndexModel
@{
}
<h2>@ViewData["MyString"]</h2>
<p>The answer to everything is @ViewData["MyNumber"]</p>

对于非字符类型的值,需要在内容页面中转换为正确的类型。

@page
@model IndexModel
@{
    var book = (Book)ViewData["MyConplexObject"];
}

<h2>@book.Title</h2>
<p>@book.Author.Name</p>
<p>@book.Price</p>

视图数据ViewData的属性

从ASP.NET Core 2.1版本开始引入ViewData属性,属性会自动添加到ViewData字典中。

public class IndexModel : PageModel
{
    [ViewData]
    public string Message { get; set; }

    public void OnGet()
    {
        Message = "Hello World";
    }
}

在内容页面中可以通过Model的属性或ViewData字典两种方式获取Message的值。

@page
@model IndexModel
@{
}

<h2>@ViewData["Message"]</h2>
<h2>@Model.Message</h2>

 

Razor页面中的ViewBag

ViewBag 是ViewData的一个包装器,提供方位ViewData数据的一个替代方法。在页面模型中故意设计的不包含ViewBag属性,但可以使用ViewBag去获取ViewData对象:

@page
@model IndexModel
@{
    ViewBag.Title = "My Home Page";
}

可通过ViewData 或者 ViewBag 读取数据:

<title>@ViewBag.Title</title>
<title>@ViewData["Title"]</title>

Razor页面中的动作结果

Action Results 通常是处理方法的返回类型,她负责生成response及适当的状态码。Action Results 实现 Microsoft.AspNetCore.Mvc.ActionResult 类 或 Microsoft.AspNetCore.Mvc.IActionResult 接口。ASP.NET Core 包含超过30个 ActionResult 类以满足各样的需求。

posted @ 2021-08-10 21:41  VTech_kevin  阅读(443)  评论(0编辑  收藏  举报