2011-06-28 51 views
2

我有一個包含值類型的模型(例如boolDateTime,枚舉等),我用[Required]屬性標記了屬性。ASP.NET MVC - 值類型的服務器端驗證

我加載頁面,不提供任何值,並提交表單。客戶端驗證已關閉。顯然ModelState是無效的。

但是,當表單返回給客戶端時,這些字段將填充該類型的默認值(例如,false,DateTime.MinValue,第一個枚舉值等)。這不是我想要的,我希望這些字段保持空白。

目前我正在通過將屬性設置爲空(例如bool?)來解決此問題。這是「正確」的事情嗎?或者我應該做其他事情以確保MVC不會自動使用默認值填充值類型屬性?

+0

或者我可能會被告知我應該使用只有字符串的View Model類...?不幸的是,這有點晚了,部分原因是由於要求,部分原因是我缺乏經驗。直到下一個項目,我都會保存下來! –

+0

我會堅持可空選項。這是我想做的事情,除了可能不使用MVC客戶端驗證並創建我自己的驗證外,我找不到更簡單的解決方案。儘管這似乎太多了。 – dreza

回答

1

我假設你希望表單中的字段在下次訪問時保持空白 - 在這種情況下,可空類型是一種可行的方法。字符串是另一個。

注意:我傾向於在ViewModel中不使用枚舉,而是使用可爲空的整數 - 我發現它更容易。

另一個訣竅是將枚舉值留在未映射的組合框中,然後添加一個「請選擇」(值= 0)選項。在這種情況下,你最好不用空類型,因爲0很有用。

如果您的Domain對象具有單獨的ViewModel,所有這些工作會更好 - 使用等效的Automapper可以在它們之間映射。這使您可以在ViewModel中爲您的UI設計一組類型,而不會影響您在域圖層中擁有的內容。

相關問題