09-自定义字段模板标注
上面,我们要想自定义模板的样式,需要写几个标注
[UIHint("DateBox")]
[Display(Name = "生效日期")]
[HiddenInput(DisplayValue = false)]
public DateTime EffTime { set; get; }Code language: JavaScript (javascript)
那么其实我们完全可以自己封装一个标注的
自定义日期控件标注
[AttributeUsage(AttributeTargets.Property)]
public abstract class DateBoxAttribute : ValidationAttribute, IClientValidatable, IMetadataAwareCode language: CSS (css)
前端验证
public virtual IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield break;
}Code language: PHP (php)
服务器端验证
public override bool IsValid(object value)
{
return true;
}Code language: PHP (php)
添加元数据属性
public virtual void OnMetadataCreated(ModelMetadata metadata)
{
metadata.HideSurroundingHtml = true;
metadata.TemplateHint = string.IsNullOrEmpty(this.TemplateHint) ? this.GetType().Name.Replace("Attribute", string.Empty) : this.TemplateHint;
metadata.DisplayName = this.DisplayName;
metadata.AdditionalValues.Add("Style", this.Style);
}Code language: JavaScript (javascript)
重复标注说明
如果重复的标注的话,如果是附加属性,那么就会报错,如果不是那么以上面的为准
[DateBox2(DisplayName = "生效日期2")]
[DateBox(Abc = "hahad",Cls = "csd",DisplayName = "生效日期",Width = 124)]
public DateTime EffTime { set; get; }Code language: JavaScript (javascript)
10-字段视图中取得元数据
我们在字段添加的标注特性,其实都是为了字段的html呈现和字段的验证还有生成数据库。
那么这节课,我们来讲解一下,如何在字段视图中取得附加特性和其他的特性。
取得附加特性
var width = ViewData.ModelMetadata.AdditionalValues["Width"];Code language: JavaScript (javascript)
取得字段值
如果要在字段视图中取得字段的值的时候
需要用到modelstate
在视图中我们可以通过@Model 取得字段的值
当然也可以用另外的方式来取得
ModelState modelState;
ViewData.ModelState.TryGetValue(ViewData.ModelMetadata.PropertyName, out modelState);
if (modelState!=null)
{
var str = modelState.Value.AttemptedValue;
}Code language: JavaScript (javascript)
Previous: 元数据
Next: DisplayTemplates和自定义标注