页面模型 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 类以满足各样的需求。