0

我有3名自定義的下拉列表中爲DateTime模特屬性,分別代表日/月/年即設定每個值一個隱藏的輸入,用也可以正常工作的自定義模型綁定器ASP.NET MVC獲取的DateTime的月/日/年的屬性繼承屬性驗證

我也創建了一個RequiredIf驗證屬性與客戶端驗證,並且它工作正常服務器和客戶端添加相應的data-val-requiredif屬性到隱藏的輸入,其中存儲選定的DropDown值。

問題是當我用使用自定義控制的DateTime屬性與此RequiredIf屬性。

[RequiredIf(...)] 
public DateTime Start { get; set; } 

和問題與Html.HiddenFor生成的每個下拉隱藏的輸入(在本示例綁定到Start.Month):

<input data-val="true" data-val-number="The field Month must be a number." id="Start_Month" name="Start.Month" type="hidden" value=""> 

的問題是很清楚的,驗證屬性是在DateTime屬性,不是Month子屬性,因此data-val-requiredif...驗證屬性未在該輸入上設置。

問題

是什麼力量讓Day/Month/Year繼承dataannotation屬性驗證,從它的DateTime模型最好的方法?

+1

我不認爲有辦法做你所問的。使用標準MVC驗證無法將3個不同的字段映射到單個數據驗證。你應該做的不是使用自定義模型聯編程序,而是將每個字段驗證爲單獨的int,然後將它們組合成服務器上的日期(如果一切都通過)。 –

+0

@ErikFunkenbusch你說得對,我認爲我推翻了這個並且失明瞭,你可能是一種更簡單的方法。 –

回答

-1

我不會用數據屬性名多連字符喜歡你的「數據-VAL-數」。我也遇到了大寫問題,因此在數據之後總是使用一個連字符,並且總是使用小寫字母。

如果你傳遞追溯到建立獨立的控制器(即月/日/年),你必須把它補好datetime格式的服務器上驗證工作。

如果你把日期一起在一個JSON模型傳回給控制器,MVC將JSON轉換成一個模型對象爲您服務。確保您的JSON模型與控制器參數期望的完全相同。

+0

恐怕那不是重點,我的綁定工作正常,問題必須是Day屬性繼承Start父項的數據屬性。 PD:你提到的「data-val」是microsoft.unobtrusive.validation設置的東西,它工作得很好 –

+0

反對票?真? – DJTN