我有一个看起来像这样的视图模型:
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验证处理中的错误使用嵌套视图模型时下拉列表。任何人都可以确认/建议吗?