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

时间:2012-01-06 19:19:28

标签: 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; }
}

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

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],它仍然无效。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:4)

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

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

这使得数据注释能够对渲染的html产生影响。

答案 2 :(得分:1)

例如,将所需的数据注释放入“视图模型”的“字段”中 enter image description here
而且,如果它不起作用,只需在您正在使用ViewModel的 View页面中的section脚本中编写此代码,如下所示: [![在此处输入图片描述] [2]] 希望能对您有所帮助! 不要忘记在字段中使用下面的标签装饰器   @ Html.ValidationMessageFor(x => x.Model.Name)  这是脚本:

<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>