模型Model和数据验证

28-模型Model-模型绑定-登录例子

添加一个登录的 LoginViewModel.cs

视图代码:

@model DemoModel.Models.LoginViewModel

@{
    ViewData["Title"] = "Login";
}

<h2>登录</h2>

<h4>LoginViewModel</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Login">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Name" class="control-label"></label>
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Password" class="control-label"></label>
                <input asp-for="Password" class="form-control" />
                <span asp-validation-for="Password" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-action="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}Code language: HTML, XML (xml)

28-1-模型Model-字段验证

常用验证特性:

  • Required:必填
  • StringLength:字段最大长度
  • Url:是否是网址
  • RegularExpression:符合正则表达式
  • Range:是否符合范围
  • Phone:验证是否是符合的手机号码
  • EmailAddress:验证是否电子邮件
  • Compare:比较两个属性
  • CreditCard:是否为信用卡格式

asp-for 表示绑定的字段。我们可以自定义自己的验证,继承 ValidationAttribute。

LoginViewModel.cs 示例代码:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace DemoModel.Models
{
    public class LoginViewModel
    {
        [Display(Name = "用户名")]
        [Required(ErrorMessage = "{0}是必填")]
        [StringLength(16, MinimumLength = 3, ErrorMessage = "{0}不对")]
        public string Name { set; get; }

        [Display(Name = "密码")]
        [Required(ErrorMessage = "{0}是必填")]
        [DataType(DataType.Password)]
        [StringLength(16, MinimumLength = 3, ErrorMessage = "{0}不对")]
        [Url]
        [EmailAddress]
        [Phone]
        public string Password { set; get; }

        [Display(Name = "确认密码")]
        [Compare(otherProperty: "Password")]
        public string ComparePassword { set; get; }

        [Range(10, 100, ErrorMessage = "年龄范围是10到100")]
        public int Age { set; get; }

        [RegularExpression(@"\d{4}\.\d{4}\.\d{4}\.\d{4}", ErrorMessage = "不是正确是IP")]
        public string IP { set; get; }
    }
}

视图中使用 EditorForModel 的示例:

@model DemoModel.Models.LoginViewModel

@{
    ViewData["Title"] = "Login";
}

<h2>登录</h2>

<h4>LoginViewModel</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Login">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Name" class="control-label"></label>
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Password" class="control-label"></label>
                <input asp-for="Password" class="form-control" />
                <span asp-validation-for="Password" class="text-danger"></span>
            </div>

            @Html.EditorForModel()

            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-action="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}Code language: HTML, XML (xml)

29-自定义验证-服务器端的验证IsValid

继承 ValidationAttribute 可以自定义自己的验证。如果想要客户端验证,需要借助 jquery validate。比如我们实现一个验证时间格式,时间格式要符合 hh:mm:ss 这样的格式。

30-远程验证-验证注册邮箱地址

比如验证电子邮箱是否已经被注册,这个我们需要进行服务器端验证。给字段添加 [Remote] 特性:

[Remote(action: "VerifyEmail", controller: "Users")]Code language: JSON / JSON with Comments (json)

控制器中对应的验证方法:

[AcceptVerbs("Get", "Post")] //接收GET POST方式
public IActionResult VerifyEmail(string email)
{
    return Json(data: true); //这个data的值是bool 表示验证成功与否 验证通过 则没错则true 有错则false
}Code language: PHP (php)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注