【问题标题】:Enable Display Format annotation from a ViewModel从 ViewModel 启用显示格式注释
【发布时间】:2014-06-30 21:39:37
【问题描述】:

我正在尝试使用 MVC 5 和 EF 6 代码优先方法开发应用程序。

我是软件开发的新手。

我想添加这个数据注释:

 [DataType(DataType.Date)]
 [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]

从 ViewModel 到名为 Birthdate 的属性

一个例子来说明:

public class StudentRegisterViewModel
    {
        public string LastName { get; set; }

        public string FirstMidName { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        public DateTime EnrollmentDate { get; set; }
    }

这里的问题是EnrollmentDate这个字段不能识别DisplayFormat注解。 有谁能帮我处理一下吗?

【问题讨论】:

    标签: c# ef-code-first asp.net-mvc-5


    【解决方案1】:

    写你自己的ValidationAttribute。为此,您需要使用自己的逻辑覆盖 IsValid() 方法。

    如果您愿意,可以添加更多验证:

    public class MyAmazingValidationClass : ValidationAttribute
    {
        protected override bool IsValid(object value)
        {
            DateTime date;
            bool parsed = DateTime.TryParse((string)value, out date);
            //or maybe : 
            bool parsed = DateTime.ParseExact((string)value),"dd/MM/yyyy")
            if(!parsed)
                return false;
    
            return true;
         }
    }
    

    然后去你很棒的班级装饰它:

    public string FirstMidName { get; set; }
    
    [DataType(DataType.Date)]
    [MyAmazingValidationClass(ErrorMessage="You made a big mistake right now!")]
    public DateTime EnrollmentDate { get; set; }
    

    【讨论】:

      【解决方案2】:

      要应用[DisplayFormat] 中指定的格式,您需要通过Html.DisplayFor() 访问该值。例如,在这样的视图中:

       @Html.DisplayFor(vm => vm.EnrollmentDate)
      

      【讨论】:

        【解决方案3】:

        [DisplayFormat] 属性仅由 DisplayFor 和 EditorFor 使用。而不是像 TextBoxFor 这样的其他助手。

        要进一步格式化,你可以创建一个 css 类并使用 jQuery 来应用它:

        $("EnrollmentDate").addClass("class-name")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-06
          • 2013-05-14
          • 1970-01-01
          • 2021-08-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-22
          • 2018-10-09
          相关资源
          最近更新 更多