2012-01-06 58 views
3

我有几个不同的模型,其中包含用数据注释进行验证的属性。数据注释不能在视图模型中工作

public class BillingModel 
{ 
    [Required, 
    DisplayName("First Name")] 
    public string FirstName { get; set; } 

    [Required, 
    DisplayName("Last Name")] 
    public string LastName { get; set; } 
} 

public class CustomerModel 
{ 
    [Required, 
    DisplayName("Address")] 
    public string Adress { get; set; } 

    [Required, 
    DisplayName("City")] 
    public string City { get; set; } 
} 

当我把他们在这样的视图模型:

public class OrderViewModel 
{ 
    public BillingModel Billing { get; set; } 
    public CustomerModel Customer { get; set; } 
} 

他们呈现出这样的:

<input id="Business_FirstName" name="Business.FirstName" type="text" value="" /> 

<input id="Business_LastName" name="Business.LastName" type="text" value="" /> 

我的剃须刀是这样的:

@Html.TextBoxFor(x => x.Business.FirstName) 
@Html.TextBoxFor(x => x.Business.LastName) 

我有很多需要的属性因为每个班级都包含特定的方法,所以他们生活在自己的班级中即使我将[Required]放在视图模型中的每个属性上,它仍然不起作用。

回答

6

你也需要把你的观点如下<script />元素(最好是如果你将使用客户端验证的_layout.cshtml查看所有的观点):

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

修改相应的路径。但是,这应该让你的验证和运行。您也可以使用ValidationMessageFor()。像这样:

@Html.TextBoxFor(x => x.Business.FirstName) 
@Html.ValidationMessageFor(x => x.Business.FirstName) 

@Html.TextBoxFor(x => x.Business.LastName) 
@Html.ValidationMessageFor(x => x.Business.LastName) 
+0

我的问题是这些对象是我为其创建元数据的实体框架对象,但将部分类放置在错误的名称空间中。 – 2012-01-06 20:20:36

4

只为别人谁遇到这一点,除了对方的回答,您还需要启用以下web.config设置:

<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

这是使数据注释对呈现的html有影响。

+0

这个答案与已被接受的答案一样重要,你需要在你的web-config中使用JS和这些设置才能正常工作。 – 2017-03-10 17:18:54