标签:
在最新的VS2015RC版,开始支持了TagHelper的智能提示,主要体现在在写TagHelper有Attributes的提示,正确的Tag和Attribute会变成粗体,错误的Attribute不会变成粗体,这样就很容易发现书写错误。
Attribute就是Property。也就是说TagHelper类中的具有getter和setter的公开Property就是它的Attribute。
public class MyTagHelper: TagHelper { //私有property不是Attribute private int ID {get; set;} //这个才会是Attribute
public string Name {get; set;}
//只读的property也不是Attribute
public string Sex {get;} public override void Process(TagHelperContext context, TagHelperOutput output) { ... } }
上面我们定义了MyTagHelper,它只有一个Attribute是Name。所以View上html应该是这样:
<my name="yy"></my>
Attribute名一般都是小写,会将Property名将大写字母变小写前面加上"-",如果大写字母在第一个位置,那么只需要改成小写,前面不需要加“-”。这点和TagHelper的作用的Tag名和TagHelper类之间的关系有些类似。
比如public class MyTagHelper: TagHelper { public string ParentName {get; set;} }
其对应的View上的html是:
<my parent-name="Mike"></my>
当然我们也可以在Property头上添加HtmlAttributeName来添加自定义的Attribute名,这样就让这两者之间毫无关系。
比如public class MyTagHelper: TagHelper { [HtmlAttributeName("male")] public bool Sex {get; set;} [HtmlAttributeName("NickName")] public string Name {get; set;} }
这样MyTagHelper里面的Sex Property对应的Attribute在View上名字是male,而Name Property对应的Attribute是NickName:
<my male="true" NickName="yy"></my>
public class MyTagHelper: TagHelper { [HtmlAttributeNotBound()] public bool Sex {get; set;}
public string Name {get; set;} }
还有一个不推荐的方法就是将setter设成internal或者private。
<my name="yy" age="34" married="true" sex="Sex.Male"></my>
public enum Sex { Male = 0, FeMale =1 }
@{ var name = "yy";
var age = 34; } <my name="@name" age="age"></my>
这里有一点需要注意,当Attribute的Type(也就是Property的Type)是string类型时,在设置Attribute值时需要在这个变量前加上@符号,用以和文本常量“name”作区分,其他的类型可以省去这个@符号。
<my name="yy" location="new Location{Country="China", City="Shanghai"}"></my>
其中location Attribute的Type是Location,定义如下:
public class Location { public string Country{get; set;} public string City{get; set;} }
标签:
原文地址:http://www.cnblogs.com/liontone/p/4646410.html