TagHelper使服务器端代码可以参与在Razor文件中创建和呈现HTML元素,是asp.net core中内置的标签助手,实用性和维护性特别强。
今天只总结一下:为什么要使用taghelper?如下:
1:通过映射关系匹配路由
比如,平时写一个a标签,跳转到某一个控制器下,我们这样写:
<a href="/Home/Index">返回到列表页</a>
而使用TagHelper后可以这样写:
<a asp-action="Index" asp-controller="Home">返回到列表页</a>
这样写都能实现同样的功能,跳转到Home控制器下的Index方法里。其实还有好多种方法也可实现,但是为什么要使用TagHelper呢?
因为使用原始的那种写法是属于硬编码的形式,而使用TagHelper里的属性标签是通过映射关系生成的,假如路由配置修改了,比如原先的是这样:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
突然有一天把路由配置给改了:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "api/{controller=Home}/{action=Index}/{id?}");
});
这个时候,如果使用的原始硬编码形式,就需要对整个项目里的跳转链接进行修改,而如果使用TagHelper属性标签的话,就不需要了,它会动态加载和匹配路由。
2:模型验证提示信息
一般项目中,提交表单需要验证,验证用户输入的信息是否合格,是否正确,这个时候使用TagHelper里的属性标签非常友好,不需要写什么逻辑代码,如下:
<form method="post">
<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>
<input type="submit" value="save" />
</form>
在模型类中:
public class StudentCreateViewModel
{
[Display(Name = "姓"),Required]
public string FirstName { get; set; }
[Display(Name = "名"),Required,MaxLength(10)]
public string LastName { get; set; }
[Display(Name = "出生日期"), Required]
public DateTime BirthDate { get; set; }
[Display(Name = "性别")]
public Gender Gender { get; set; }
}
使用TagHelper属性标签后:
就会自动提示了。
3:对图片标签增强
有些时候,我们修改文件夹里的图片名称,但是在浏览器查看后图片还是原先的图片,一般做法可以强制刷新,或者清除浏览器缓存
使用TagHelper里一个属性标签,就可以轻松解决该问题:
<img src="" class="card-img-top" asp-append-version="true"/>
这样Img TagHelper就会对Img标签进行增强,为静态图像文件提供“缓存破坏行为”,生产唯一的散列值,并将其附加到图片的URL上,此唯一字符串会提示浏览器从服务器从新加载图片,而不是从浏览器缓存从新加载:
只有当磁盘上的文件修改时,将会重新计算生成的哈希值,缓存才会失效。
优点还有好多好多,暂时总结三点常用的吧!