数据注释在视图模型中不起作用

The*_*Man 4 asp.net-mvc-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; }
}
Run Code Online (Sandbox Code Playgroud)

当我把它们放在这样的视图模型中时:

public class OrderViewModel
{
    public BillingModel Billing { get; set; }
    public CustomerModel Customer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

它们呈现出来像这样:

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

<input id="Business_LastName" name="Business.LastName" type="text" value="" />
Run Code Online (Sandbox Code Playgroud)

我的剃刀看起来像这样:

@Html.TextBoxFor(x => x.Business.FirstName)
@Html.TextBoxFor(x => x.Business.LastName)
Run Code Online (Sandbox Code Playgroud)

我有许多属性需要存在于自己的类中,因为每个类都包含特定的方法.即使我[Required]在View Model中放置了每个属性,它仍然无法正常工作.

小智 8

您还需要<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> 
Run Code Online (Sandbox Code Playgroud)

相应地修改路径.但是这应该可以使您的验证正常运行.

另外,在视图中使用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)
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 7

对于遇到此问题的其他人,除了其他答案之外,您还需要启用以下 web.config 设置:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
Run Code Online (Sandbox Code Playgroud)

这就是数据注释能够影响渲染的 html 的原因。