# 简单使用

@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){
	
}