本篇介绍数据如何从 controller 传递到 view。总体来说,数据从 controller 传递到 view,分为两类:第一类是使用 asp.net core 框架定义的 ViewData 或者 ViewBag 传递数据,第二类是基于对象的强类型传递。我们从第二类强类型的数据传递开始。
完成本篇的代码后,程序效果如下。默认显示学生的清单:
点击查看按钮后,跳转到学生详情页面:
首先编写 StudentController 的代码:
默认的 Index 视图,在 index.cshtml 页面显示。我们注意到 View() 方法的参数为 students,students 是一个对象,传递到 view 中。Index.cshtml 使用 @model 指令声明在页面中可以访问控制器中的模型 (model)。然后在页面中使用 Model 属性就表示所参照的对象,能访问到对象的内容。
下面是 Index.cshtml 的代码:
因为 students 是 IEnumerable<> 类型,在页面中可以用 foreach 进行遍历。下面我们再来看 Detail() 方法,传递给 view 的是一个 student,在页面中使用下面的方法来接收数据:
在上面的两个页面中,标题是在页面中硬编码的,这些数据可以从 controller 中使用 ViewData 或者 ViewBag 传递过来。ViewData 是一个字典,使用方法为:
在 controller 中:
在 view 中:
ViewBag 是对 ViewData 的进一步封装,是动态类型的属性。在 Controller 中:
在 view 中:
源码
本系列博文的源码托管在 gitee aspnetcore-studentmanagement,为了记录完整的编写过程,重要的步骤通过 tag 进行标记,本次代码 tag 为 v0.02。