什么是强类型数据
强类型数据是控制器传给视图的一种数据类型,其中也包括了一个对立的类型叫做“弱类型数据”,例如ViewData、ViewBag。强类型数据顾名思义,可以让传递给视图的数据有明确的类型定义和约束力,并且程序在编译时就可以确认类型。
强类型数据通常会对应一个页面,对页面的数据起到一个封装组织的作用。在实际运用中又可分为两种类型:一种是用于表单提交的FormModel,另一种是用于数据展示的ViewModel。在这些功能中就无需指定多个参数进行数据传递而是直接使用一个对象进行数据的传递和交互。
强类型数据的基本使用
1.创建数据类型
强类型数据的字段通常来源于所对应视图中所需要的数据,在结构定义上一般设计为一个POCO(简单的对象,类中除了属性没有其他的成员),并且将该类型存储在Models文件夹中。
注意:如果将强类型运用到表单,那么视图中表单元素的name属性值要和强类型的属性名保持一致,不区分大小写。
1 namespace WebApplication1.ViewModels 2 { 3 public class Address 4 { 5 public string Name { get; set; } 6 public string Street { get; set; } 7 public string City { get; set; } 8 public string State { get; set; } 9 public string PostalCode { get; set; } 10 } 11 }
2.运用到控制器
对于数据的提交行为,如某个页面中的表单需要提交大量的数据,如果没有使用到强类型数据,那么我们在Action中参数的定义会无休止的延伸下去,这显然不符合一个良好的设计。如图:
这个时候我们就可以使用强类型数据,根据表单的数据抽象出一个类,并将该类作为Action接收数据的类型。
对于数据的展示行为,根据不同业务情况获取到数据后生成一个强类型数据的实例对象,作为参数由控制器传递给视图。
1 public IActionResult Contact() 2 { 3 ViewData["Message"] = "Your contact page."; 4 5 var viewModel = new Address() 6 { 7 Name = "Microsoft", 8 Street = "One Microsoft Way", 9 City = "Redmond", 10 State = "WA", 11 PostalCode = "98052-6399" 12 }; 13 14 return View(viewModel); 15 }
3.运用到视图
强类型数据运用到的视图,通常也称为强类型视图。运用到视图的第一步就是需要在视图首行引入强类型数据的数据类型全名(命名空间+类名),然后使用“@model”指令就可以在视图中点(.)出对应的属性,并根据需求作用于不同的结构中。
示例-在视图中将强类型的数据进行展示渲染到HTML标签中
1 @model WebApplication1.ViewModels.Address 2 3 <h2>Contact</h2> 4 <address> 5 @Model.Street<br> 6 @Model.City, @Model.State @Model.PostalCode<br> 7 <abbr title="Phone">P:</abbr> 425.555.0100 8 </address>
示例-在视图中结合强类型数据创建一个Html元素
注意:在视图中使用强类型数据时,一定要保证对应的控制器的Action中有传入强类型数据的实例。
这里只介绍基本的能力,至于具体的操作运用,可结合需求自行拓展。