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)