其实对于这块知识点,一直觉得没有必要进行总结,只是新到的公司当时用到了 kendo for asp.net mvc ,里面有用到,自动初始化页面,而依据基于对象属性的注解与验证,故此抽时间总计了一下吧。借鉴与《asp.net mvc 5高级编程》
验证注解的使用
数据注解定义在一般在命名空间”System.ComponentModel.DataAnnotations”提供了服务器端验证的功能,当在模型的属性上使用时,框架也支持客户端验证。在命名空间DataAnnotations总工有4个特性可以用于一般的验证场合。
1.Required强调不能为空
[Required(ErrorMessage= "{0}不能为空")]
public Guid BID { get;set; }
2.StringLength控制字段长度
[StringLength(4000, MinimumLength = 1,ErrorMessage = "{0}长度在{2}-{1}之间")]
public String Enclosure { get; set; }
3.RegularExpression正则表达式
[RegularExpression(@"^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+",ErrorMessage = "邮箱输入有误,重新输入。")]
public string Email{ get; set; }
4.Range指定值类型的范围
[Range(35,44,ErrorMessage = "年龄不符合要求")]
public int Age { get; set; }
5.Compare两次输入必须一致
[RegularExpression(@"^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+",ErrorMessage = "邮箱输入有误,重新输入。")]
public string Email{ get; set; }
[Compare("Email ")]
public stringEmail2 { get; set; }
6.Remote是mvc框架为应用程序在命名空间system.web.mvc额外添加的可以利用服务器端的回到函数执行客户端的验证逻辑
[Remote("CheckUserName", "Admin")]
public stringUserName { get; set; }
public JsonResult CheckUserName(string username)
{
returnJson(DateTime.Now.ToString(),JsonRequestBehavior.AllowGet);
}
显示和编辑注解
1.DisplayName显示名称
[DisplayName("金额(元)")]
publicDecimal Money { get; set; }
2.ScaffoldColumn可以隐藏HTML的辅助方法
[ScaffoldColumn(false)]
public stringUserName { get; set; }
注:虽然ScaffoldColumn可以做到不显示一些属性在页面上被编辑,但是如果提交的Form有这个属性值,模型绑定机制依然会绑定此属性值。
3.DisplayFormat处理属性的各种格式。比如日期,浮点数等
[DisplayFormat(ApplyFormatInEditMode= true,DataFormatString = "{0:c}")]
public decimal Total{ get; set; }
4.ReadOnly只读
[DisplayName("计取时间")]
[ReadOnly(true)]
public string RememberTime { get; set; }
5.运行时提供关于属性的特定用途信息。
[Required(ErrorMessage= "密码不能为空")]
[DataType(DataType.Password)]
public stringPassword { get; set; }
自定义验证属性
其实这个方法就是定一个特性,进行验证。至于特性前面的文章有涉及。
下面对此的应用如下:
[SelectList("/Inspect/GetSite?all=0",
HttpVerbs.Post,
CascadeFrom = "SegmentID",
DataValueField = "SiteID",
DataTextField = "Name",
Data = @"function(){
return { segmentId:$(""#SegmentID"").val() };
}",
DataType = "DropDownList")]
[Required(ErrorMessage = "{0}不能为空")]
public Guid SiteID { get; set; }
具体实现如下
[AttributeUsage(AttributeTargets.Property,AllowMultiple=false, Inherited=true)]
public class SelectListAttribute : Attribute,IMetadataAware
{
public SelectListAttribute(string remoteUrl, System.Web.Mvc.HttpVerbs httpVerbs = 1)
{
if(remoteUrl == null)
{
thrownew ArgumentNullException("remoteUrl");
}
this.RemoteUrl= remoteUrl;
this.HttpVerbs= httpVerbs;
this.ServerFiltering= true;
}
public voidOnMetadataCreated(ModelMetadata metadata)
{
if(metadata == null)
{
thrownew ArgumentNullException("metadata");
}
IDictionary<string, string> dictionary = null;
if(!string.IsNullOrEmpty(this.AdditionalValues))
{
try
{
dictionary = this.AdditionalValues.FromJson<IDictionary<string, string>>();
}
catch
{
dictionary = newDictionary<string, string>();
}
if((dictionary != null) && (dictionary.Count > 0))
{
foreach (KeyValuePair<string, string> pair in dictionary)
{
metadata.AdditionalValues[pair.Key] = pair.Value;
}
}
}
metadata.AdditionalValues["RemoteUrl"] = this.RemoteUrl;
metadata.AdditionalValues["Type"] = this.HttpVerbs;
metadata.AdditionalValues["Data"] = this.Data;
metadata.AdditionalValues["ServerFiltering"] = this.ServerFiltering;
metadata.AdditionalValues["Events"] = this.ParseEvents(this.Events);
metadata.AdditionalValues["CascadeFrom"] = this.CascadeFrom;
metadata.AdditionalValues["Recursion"] = this.Recursion;
metadata.AdditionalValues["Multiple"] = this.Multiple;
metadata.AdditionalValues["DataTextField"] = this.DataTextField;
metadata.AdditionalValues["DataValueField"] = this.DataValueField;
metadata.DataTypeName = this.DataType;
}
private IDictionary<string, string> ParseEvents(string value)
{
try
{
if(string.IsNullOrWhiteSpace(value))
{
value = "{}";
}
return new Dictionary<string, string>(value.FromJson<IDictionary<string, string>>(), StringComparer.OrdinalIgnoreCase);
}
catch
{
return new Dictionary<string, string>();
}
}
public string AdditionalValues { get; set; }
public string CascadeFrom { get; set; }
public string Data { get; set; }
public string DataTextField { get; set; }
public string DataType { get; set; }
public string DataValueField { get; set; }
public string Events { get; set; }
public System.Web.Mvc.HttpVerbs HttpVerbs { get; private set; }
public bool Multiple { get; set; }
public bool Recursion { get; set; }
public string RemoteUrl { get; private set; }
public bool ServerFiltering { get; set; }
}
更多web前端免费学习内容,加群434623999