.net core MVC中级教程(四)

一、弥补上一篇的两个bug
二、介绍与使用DATA ANNOTAIONS

一、弥补上一篇的两个bug

上一篇有两个bug,分别是创建新学生后ID为0,刷新创建后信息界面发现会反复提交其数据,这是为啥
在这里插入图片描述
注意上面这个url地址/Home/Create
这么说就是我们还处于Create创建的页面,并没有跳转到Detail界面,而且Create.cshtml页面中的数据模板是StudentCreateViewModel,没有Id属性。所以为零
这怎么做?
在Homeconreoller中
在这里插入图片描述
这么做会返回的是Detail这个url,其中id是newstudent.Id
在EfCoreRepository中应当反回的是model
在这里插入图片描述
因为数据库保存的是model,所以也只会对model中的Id属性进行自增,如果返回的是student的话Id会是零
ok,bug解决

二、介绍与使用DATA ANNOTAIONS

简单说下用于验证数据
在这里插入图片描述
在这里插入图片描述

现在我们先对Create视图改变下

@using TutorialStudy.Model
@model TutorialStudy.Views.ViewModel.StudentCreateViewModel

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>添加学生</title>
</head>
<body>
<form method="post">
    <h1>创建一个学生</h1>
    <div>
        <label asp-for="FirstName"></label>
        <input asp-for="FirstName"/>
    </div>
    <div>
        <label asp-for="LastName"></label>
        <input asp-for="LastName" />
    </div>
    <div>
        <label asp-for="BirthDate"></label>
        <input asp-for="BirthDate" type="date" />
    </div>
    <div>
        <label asp-for="Gender"></label>
        <select asp-for="Gender" asp-items="Html.GetEnumSelectList<Gender>()"></select>
    </div>
    <button type="submit">添加</button>
</form>
</body>
</html>

运行看看
在这里插入图片描述
在这里你可以不输入什么直接保存,就是空值,也会保存到数据库中,接下来我们要面对这个问题

打开我们的viewmodel中的StudentCreateViewModel

using System;
using System.ComponentModel.DataAnnotations;
using TutorialStudy.Model;

namespace TutorialStudy.Views.ViewModel
{
    public class StudentCreateViewModel
    {
        //Required指定需要数据字段值
        [Display(Name = "姓"),Required,]
        public string LastName { get; set; }

        //MaxLength字符最大长度
        [Display(Name = "名"),Required,MaxLength(10)]
        public string FirstName { get; set; }

        [Display(Name = "性别")]
        public Gender Gender { get; set; }

        [Display(Name = "出生日期")]
        public DateTime BirthDate { get; set; }
    }
}

这就是对数据添加约束还有取名
然而这样做只有Name有效会输出到界面,然而我们还要判断数据满不满足条件,
在HoemController中
在这里插入图片描述
这句话改为这样,会发现我们运行后输入空值什么都没有发生,只是感觉刷新了一下
同样也没有录入数据库
在这里插入图片描述
还有上面这个问题
上面那个我记得是是夸大请求伪造
Httppost常出现,为避免
RequestVerificationToken

修改create.cshtml代码

@using TutorialStudy.Model
@model TutorialStudy.Views.ViewModel.StudentCreateViewModel

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>添加学生</title>
</head>
<body>
<form method="post">
    <h1>创建一个学生</h1>
    <div>
        <label asp-for="FirstName"></label>
        <input asp-for="FirstName"/>
        <span asp-validation-for="FirstName"></span>
    </div>
    <div>
        <label asp-for="LastName"></label>
        <input asp-for="LastName" />
        <span asp-validation-for="LastName"></span>
    </div>
    <div>
        <label asp-for="BirthDate"></label>
        <input asp-for="BirthDate" type="date" />
        <span asp-validation-for="BirthDate"></span>
    </div>
    <div>
        <label asp-for="Gender"></label>
        <select asp-for="Gender" asp-items="Html.GetEnumSelectList<Gender>()"></select>
        <span asp-validation-for="Gender"></span>
    </div>
    <button type="submit">添加</button>
</form>
</body>
</html>

运行,直接什么都不填,直接添加
在这里插入图片描述
这样就会有提示
ok!
github地址
https://github.com/1045683477/.net-core-mvc-intermediate

原文地址:https://www.cnblogs.com/zuiren/p/10849921.html