2012-01-17 24 views
0

我有一個看起來像這樣的視圖模型的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驗證處理下拉列表中的錯誤當使用嵌套視圖模型時。任何人都可以確認/建議?

+0

我剛證實,如果我的形式的代碼移動到一個局部視圖,並通過它,它需要(VenueAddViewModel代替VenueIndexViewModel)的準確視圖模型,驗證屬性出現細。但是,我仍然不確定是否在上面做了不正確的事情,或者確實遇到了應該報告的錯誤。 – Chris 2012-01-17 18:35:26

回答

0

據我所知你不能在嵌套對象上進行客戶端驗證。快速谷歌搜索似乎證實了這一點。

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

+3

這很好,很花哨,但它可以用於純文本字段。我猜這是偶然的,支持從未正式編譯過嵌套對象,所以我認爲是一個錯誤實際上只是一個未經測試/不支持的情況。 – Chris 2012-01-17 19:43:30