# 简单使用
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers//_Viewimport.cshtml 首先引用
<form asp-action="Login" asp-route-id="@user.ID" asp-controller="Account" method="post">
<label asp-for="firstName">
<input asp-for="firstName">
<span asp-validation-for="firstName">
<input asp-for="birthday">//日期型,可以根据数据类型自动生成对应类型的输入框
<select asp-for="gender" asp-items="Html.GetEnumSelectList<Gender>()">
<option>请选择</option>
</select>
<div asp-validation-summary="All"></div> //错误汇总
</form>
<a asp-action="Detail" asp-controller="Index" asp-route-id="@(Model.ID)">@(Model.Title)</a>
<environment include="Staging,Production">//开发环境
<environment exclude="Development">//非开发环境
//指定路径下的所有JS文件但不包含某个文件下的
<script asp-src-include="~/app/**/*.js" asp-src-exclude="~/app/service/**/*.js"></script>
//会在图片路径后面加上"?v=哈希值"
<img src="~/images/logo.png" asp-append-version="true">
# 自定义TagHelper
继承父类:TagHelper,实现(override) Process这个方法
//例一
public class EmailTagHelper:TagHelper{
public string MailTo{get;set;}
//TagHelperContext 当前上下文的tag
//TagHelperOutput 输出的HTML代码
public override void Process(TagHelperContext context,TagHelperOutput output){
output.TagName="a";//替换Email为a
output.Attributes.SetAttribute("href",$"mailto:{MailTo}");
output.Content.SetContent(MailTo);
}
}
//使用,先需要在_Viewimport先添加引用
@addTagHelper*,Sylone.Web
<email mail-to="303258100@qq.com">303258100@qq.com</email>
//例二
[HtmlTargetElement(Attributes="bold")]//查找HTML元素中含有属性为bold的
[HtmlTargetElement("bold")]//和下面方法名的作用一致
public class BoldTagHelper:TagHelper{
[HtmlAttributeName("color")]
public string myColor{get;set;}
public override void Process(TagHelperContext context,TagHelperOutput output){
output.Attributes.RemoveAll("bold");
output.PreContent.SetHtmlContent("<strong>");
output.PostContent.SetHtmlContent("</strong>");
output.Attributes.SetAttribute("style",$"color:{myColor}");
}
}
//使用,先需要在_Viewimport先添加引用
@addTagHelper*,Sylone.Web
<bold color=“red”>加粗的字体</bold>
<p bold color=“red”>加粗的字体</p>
# 使用前端库
通过package.json的dependencies添加依赖库
"version": "1.0.0",
"name": "asp.net",
"private": true,
"devDependencies": {},
"dependencies": {
//前端验证需要的库
"jquery": "3.6.0",
"jquery-validation": "1.19.3",
"jquery-validation-unobtrusive": "3.2.12"
}
# 实体类数据绑定
- Bind 有选择性的绑定
- BindNever 不进行数据绑定
//例一
public class UserAddModel{
[required]
[Display(Name="用户名")]
public string name{get;set;}
[required]
[Display(Name="密码")]
[DataType(DataType.Password)]
public string pass{get;set;}
[BindNever] //不进行数据绑定
public string phone{get;set;}
public roleInfo role{get;set;}
}
//复杂数据类型,可直接通过ViewModel(DTO)获取数据
//如果实体类本身包含此复杂数据类型的属性,也可以识别
<input asp-for="role.roleID">
//Bind["roleInfo"] 有选择性的绑定
public void AddUser(Bind["roleInfo"] UserAddModel userAddViewModel){
}
//例二
//View
@model IList<string>
<form asp-action="List" method="post">
@for(var i=0;i<10;i++){
<div class="form-group">
<label>Item:@(i+1)</label>
<div>
<input asp-for="@Model[i]">
</div>
</div>
}
<button type="submit">提交</button>
//Controller
Public IActionResult List(List<string> items){
}