2009-02-14 27 views
9

我有一個控制器操作,它具有可爲空的DateTime作爲來自我的窗體上的文本框的參數之一。我注意到,如果用戶要在該文本框中輸入「blah」,那麼我會爲DateTime param返回一個Null值,並自動添加模型錯誤。在這種情況下,添加的ModelState錯誤是「值'等於'無效」。如何關閉或替換Asp.net MVC中的默認ModelState錯誤消息?

我的問題是我的網站支持多種語言,所以我需要本地化這個錯誤。通常我只是自己驗證並添加ModelState錯誤,但在這種情況下,我似乎無法擺脫它。如果我爲同一個文本框添加另一個ModelState錯誤,它不會顯示。

回答

8

我有到現在爲止你已經收到了答案的強烈反對。他們中沒有一個真正回答你問的問題,這就是如何本地化MVC錯誤信息。如果您實際上沒有本地化您的應用程序,您可能會花費很多精力來解決此問題的單個實例,並且仍然會遇到與其他50種MVC錯誤消息相同的問題。它們在MvcResources.resx中定義,它可以在MVC源代碼的Resources文件夾中找到(或者只需使用Reflector瀏覽程序集)。特別是,您正在尋找Common_ValueNotValidForProperty資源。您可以通過提供本地化的附屬程序集來本地化這些消息,就像本地化任何.NET應用程序一樣。 .NET應用程序中的國際化/本地化的具體細節不在本答案的範圍之內,但有很多關於此主題的書籍。在MVC中這樣做與在任何其他應用程序中執行此操作沒有什麼不同,除了在大多數情況下,框架的本地化已經可用。 MVC目前仍處於測試階段,據我所知,目前只有英文版本。據推測,這將在發佈後改變。

1

我會從傳遞給TryUpdateModel/Update模型的白名單中刪除特定的文本框,然後「手工」驗證它,而不是讓框架驗證它。或者,您可以嘗試遍歷ModelState Error集合,找到想要刪除的那個,並刪除它 - 例如,在找出您想要刪除哪一個的時候使用RemoveItem。

編輯:如果您使用默認的ModelBinder,您可以實現自己的。我假設,因爲您正在生成自己的模型錯誤,您正在使用TryUpdateModel/UpdateModel。

0

我可以撥打ModelState.Clear();在行動的開始。但是,我不確定我喜歡在每個動作中都這樣做。

0

您可以使DateTime參數爲空。然後,如果沒有提供,錯誤將不會被添加到ModelState中。

public ActionResult Method(Datetime? date) 
{} 

而不是

public ActionResult Method(Datetime date) 
{} 
相關問題