来自实体配置的MVC 4验证消息

时间:2014-11-14 12:51:58

标签: asp.net-mvc asp.net-mvc-4 validation

这是我的模型中需要验证的属性。

    public System.DateTime EntryDate { get; set; }
    public System.DateTime DeadLine { get; set; }
    public string Customer { get; set; }
    public string CustomerContact { get; set; }

这是我的EntityTypeConfiguration,用于从这些属性进行验证。

        this.Property(t => t.EntryDate)
            .IsRequired();

        this.Property(t => t.DeadLine)
            .IsRequired();

        this.Property(t => t.Customer)
            .IsRequired()
            .HasMaxLength(20);

        this.Property(t => t.CustomerContact)
            .IsRequired()
            .HasMaxLength(20);

        this.Property(t => t.InterContact)
            .IsRequired()
            .HasMaxLength(20);

        this.Property(t => t.Category)
            .IsRequired()
            .HasMaxLength(5);

如何让它工作

@Html.ValidationMessageFor(model => model.DeadLine)

2 个答案:

答案 0 :(得分:1)

您实体映射中设置的验证规则不会像您在代码中建议的那样冒泡进入UI。您指定的那些规则用于在将实体保存到数据库之前创建和验证您的实体。

如果您希望使用@Html.ValidationMessageFor()帮助程序验证您的实体,则会在UI层上进行验证,而是使用ASP.NET MVC的数据注释来设置验证规则,如下所示:

public class Product {
    [StringLength(50),Required]
    public object Name { get; set; }

    [StringLength(15)]
    public object Color { get; set; }

    [Range(0, 9999)]
    public object Weight { get; set; }
}

最终,您要做的是将您的实体与传递给UI的对象分开,方法是将您的实体映射到特定于视图的模型,例如View Model。然后,您可以将上面答案中突出显示的验证属性添加到您的视图模型中,因为在某些情况下,某个表单需要一个字段,而另一个表单可能不需要。

答案 1 :(得分:0)

有一个解决方案

假设您的实体名称为SampleEntity,您将拥有这样的实体

public partial class SampleEntity{
//..Some other properties
 public System.DateTime EntryDate { get; set; }
    public System.DateTime DeadLine { get; set; }
    public string Customer { get; set; }
    public string CustomerContact { get; set; }
//..Some other properties
}

您只需在单独的cs文件中编写以下代码

[MetadataType(typeof(SampleEntity_MD))]
 public partial class SampleEntity
{
}

public partial class SampleEntity{
 [/*Your data validation attribute */]
 public System.DateTime EntryDate { get; set; }

 [/*Your data validation attribute*/]
 public System.DateTime DeadLine { get; set; }

 [/*Your data validation attribute*/]
 public string Customer { get; set; }

 [/*Your data validation attribute */]
 public string CustomerContact { get; set; }
}

通过这种方式,您可以定义所选属性的验证属性,而不会干扰框架生成的实体。