从ViewModel启用显示格式注释

时间:2014-05-13 09:26:50

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

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

我是软件开发人员的新手。

我想添加此数据注释:

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

来自ViewModels

的名为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注释。 有人可以帮助我,处理它吗?

3 个答案:

答案 0 :(得分:0)

编写自己的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; }

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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