ASP.NET MVC3验证嵌套视图模型对象字段

时间:2012-01-17 18:28:23

标签: asp.net-mvc-3

我有一个看起来像这样的视图模型:

public class VenueIndexViewModel : BaseViewModel
{
    public VenueAddViewModel Venue;
    ...
}

public class VenueAddViewModel
{
    ...
    [Required(ErrorMessage = "This field is required")]
    public string State { get; set; }
    ...
}

在我看来,我正在使用这个属性的下拉列表呈现一个表单,如下所示:

using (var form = Html.BeginForm())
{ 
    ...
    @Html.DropDownListFor(x => x.Venue.State, Model.GetStates())
    @Html.ValidationMessageFor(x => x.Venue.State)
    ...
}

这样可行,但问题是视图模型上的Required属性似乎被忽略。如果我查看HTML,那么data-val- *属性也会丢失。

<select id="Venue_State" name="Venue.State">...</select>

但是,如果我将渲染更改为文本框......

using (var form = Html.BeginForm())
{ 
    ...
    @Html.TextBoxFor(x => x.Venue.State)
    @Html.ValidationMessageFor(x => x.Venue.State)
    ...
}

我看到了预期的data-val- *属性和验证工作:

<input data-val="true" 
    data-val-required="This field is required" 
    id="Venue_State" name="Venue.State" type="text" value="">

我应该注意到我在其他地方有其他视图模型使用DropDownListFor和平面视图模型(没有嵌套对象)并且验证工作正常,所以我想我已经遇到了MVC验证处理中的错误使用嵌套视图模型时下拉列表。任何人都可以确认/建议吗?

1 个答案:

答案 0 :(得分:0)

据我所知,您无法对嵌套对象进行客户端验证。快速谷歌搜索似乎证实了这一点。

http://forums.asp.net/t/1737269.aspx/1