一、ASP.NET Core MVC中的路由
路由技术分为常规路由(传统路由)和属性路由。
常规路由
app.UseMvc(routes => { routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}"); });
属性路由
app.UseMvc();
[Route("[Controller]/[action]")]
[Route("~/")],[Route("{id?}")]
[Route("Home")]
[Route("Details/{id?}")]
ASP.NET Core MVC中的属性路由
使用属性路由,我们使用Route()属性来定义路由。
路由属性可应用与控制器或控制器中的操作方法上。
使用属性路由时,路由属性需要设置再实际使用它们的操作方法上方。
相比较于传统路由,提供了更多的灵活性。
属性路由支持层析目录结构。
重命名控制器或操作方法的名称的时候不需要去修改路由模板规则。
二、ASP.NET Core MVC中的TagHelper
服务器端的组件
在服务器上处理,可以在Razor文件中创建和渲染HTML元素。
Tag Helpers类似于HTML Helper
内置的Tag Helper用于常见任务,例如生成链接,创建表单,加载数据等。
导入内置Tag Helpers
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers
手动编写的链接
<a href="/home/details/@student.Id" class="btn btn-primary">查看</a>
使用Tag Helper
<a asp-controller="home" asp-action="Details" asp-route-id="@student.Id">查看</a>
ASP.NET Core Image tag helper
<img src="~/images/3.jpg" asp-append-version="true" />
Image TagHelper增强了<img>标签,为静止图像文件提供“缓存破坏行为”。
生成唯一的散列值并将其附加到图片的URL。此唯一字符串会提示浏览器从服务器重新加载图片,而不是从浏览器缓存重新加载。
只有当磁盘上的文件发生更改时,将会重新计算生成新的哈希值,缓存才会失效。
ASP.NET Core Environment tag helper
使用ASPNETCORE_ENVIRONMENT变量设置应用程序环境名称。
<environment include="Development">
<link href="~/lib/twitter-bootstrap/css/bootstrap.css" rel="stylesheet" />
</environment>
Environment tag helper支持根据不同的环境加载不同的内容。
三、ASP.NET Core中的模型绑定
模型绑定是将HTTP请求中的数据映射到控制器操作方法上对应的参数。
操作方法中的参数可以是简单类型,如整数、字符串等,也可以是复杂类型,如Customer,Employee,Order等。
要将HTTP的请求数据绑定到控制器操作方法上对应的参数上,模型绑定将按照一下指定的顺序在一下位置查找来自HTTP请求中的数据:
Form values(表单中值),Route values(路由中的值),Query Strings(查询字符串)。
ASP.NET Core中的模型验证
Required 指定该字段是必填的;Range指定允许的最小值和最大值;MinLength指定字符串的最小长度;MaxLength指定字符串的最大长度;Compare比较模型的2个属性。例如,比较Email和ConfirmEmail属性;RegularExpression正则表达式验证提供的值是否与正则表达式指定的模式匹配。
第一步:在属性上添加验证属性
[Display(Name="姓名")]
[Required(ErrorMessage ="请输入名字"),MaxLength(50, ErrorMessage = "名字的长度不能超过50个字符")]
public string Name { get; set; }
第二步:使用ModelState.IsValid属性验证属性是成功还是失败
if (ModelState.IsValid) { Student newStudent = _studentRepository.Add(student); return RedirectToAction("Details", new { id = student.Id }); } return View();
第三步:使用asp-validation-summary和asp-validation-for标签帮助器来显示错误信息
<div asp-validation-summary="All"></div> <div class="form-group row"> <label asp-for="Name" class="col-sm-2 col-form-label"></label> <div class="col-sm-10"> <input asp-for="Name" class="form-control" placeholder="请输入名字" /> <span asp-validation-for="Name" class="text-danger"></span> </div> </div>
ASP.NET Core中的<select>验证
<div class="form-group row"> <label asp-for="ClassName" class="col-sm-2 col-form-label"> </label> <div class="col-sm-10"> <select asp-for="ClassName" asp-items="Html.GetEnumSelectList<ClassNameEnum>()" class="custom-select mr-sm-2"> <option value="">请选择</option> </select> <span asp-validation-for="ClassName" class="text-danger"> </span> </div> </div>