我有一個看起來像這樣的視圖模型的ASP.NET MVC3驗證:嵌套的視圖模型對象字段
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)
...
}
這可行,但問題是視圖模型上的必需屬性似乎被忽略。如果我查看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)
...
}
我看到預期的數據val- *屬性和驗證工作:
<input data-val="true"
data-val-required="This field is required"
id="Venue_State" name="Venue.State" type="text" value="">
我應該注意,我有其他視圖模型在其他地方使用DropDownListFor與平面視圖模型(沒有嵌套的對象),並驗證在那裏很好,所以我想我已經擊中了MVC驗證處理下拉列表中的錯誤當使用嵌套視圖模型時。任何人都可以確認/建議?
我剛證實,如果我的形式的代碼移動到一個局部視圖,並通過它,它需要(VenueAddViewModel代替VenueIndexViewModel)的準確視圖模型,驗證屬性出現細。但是,我仍然不確定是否在上面做了不正確的事情,或者確實遇到了應該報告的錯誤。 – Chris 2012-01-17 18:35:26