ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post

通过action的参数传入一个model
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第1张图片
通过input的name属性和model属性对应上
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第2张图片
通常是使用Http post去做
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第3张图片
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第4张图片
快速创建了这个Action
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第5张图片
这个Action很简单我们只需要返回View就可以了
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第6张图片

在Home下创建Create.cshtml


Create页面
先声明小写的model的数据类型
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第7张图片
Action可以不用写,因为提交数据就是提交的本页面
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第8张图片
文本框的name值和model的属性值一一对应的关系
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第9张图片
TabHelper的写法,上面已经声明了model的类型,这里的asp-for就是for的大写的model
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第10张图片
日期类型的问题,
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第11张图片
先测试一下
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第12张图片
tagHelper自动知道日期的类型,他就会生成对应类型的input
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第13张图片

下拉框

性别可以用下拉选项,这里先建立一个枚举类

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第14张图片
修改实体类
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第15张图片
asp-item需要传入的类型

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第16张图片

可以先使用htmlHelper先生成一个list,再用asp-items
把Gender的,命名空间引进来
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第17张图片
在tagHelper里面htmlHelper的前面的@符号是可以去掉的。里面直接识别了C#的语法
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第18张图片
指明日期的类型:是date类型
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第19张图片

自动渲染成了日期选择框
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第20张图片
自动出来下拉
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第21张图片

生成的DOM
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第22张图片
有个隐藏域,值是一段token。它是用来验证请求的。防止跨站请求伪造。保证提交的form是从我的网站里面的页面内提交的,而不是一些恶意网站伪造的请求
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第23张图片

接收Form数据

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第24张图片
先测试接收当前的Student的实体对象
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第25张图片
改写成ViewModel的形式

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第26张图片

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第27张图片
在Respository里面创建Add方法的接口
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第28张图片
Ctrl+F12 鼠标选中IRespository进去实现类里面
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第29张图片
先获取到最大id后再把加入数组内
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第30张图片

修改返回类型
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第31张图片
接口的返回类型也改一下
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第32张图片
添加完成后跳转到详情页面
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第33张图片
Detail详情页
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第34张图片
运行效果
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第35张图片

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第36张图片

返回首页后,但是刚才添加的数据没有显示在列表内
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第37张图片
注册容器的时候,选择的声明周期是Scope,每次http请求都会创建一个新的实例,所以在跳回到列表页面的时候,又是一个新的实例
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第38张图片
改成单例模式,就不会有问题了
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第39张图片

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第40张图片
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第41张图片
再添加一个
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第42张图片
刚post玩之后,点击刷新页面。浏览器会把刚才这个表单提交再提交一遍。
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第43张图片
点击刷新后,又post添加了一条数据
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第44张图片
连续刷了两次页面就看到有三条重复的数据
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第45张图片
post之后,冲洗重定向到另外一个页面,在新的页面在get获取新的数据
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第46张图片

点击刷新因为这里的地址没有变化,所以还是走的那个post
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第47张图片
添加完成之后对这个地址做一个重定向
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第48张图片
这里使用nameof,这个值实际上就是Detai这个字符串,这样写比较利于重构
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第49张图片
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第50张图片

把前面这里也改成nameof的形式
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第51张图片
保存之后页面跳转
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post_第52张图片
 

转载于:https://www.cnblogs.com/wangjunwei/p/10922872.html

你可能感兴趣的:(ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 08. 输入Model和防止重复Post)