标注

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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注