簡體   English   中英

如何在Asp.net MVC中關閉或替換默認的ModelState錯誤消息?

[英]How do you turn off or replace the default ModelState error message in Asp.net MVC?

我有一個控制器動作,它有一個可以為空的DateTime作為來自我表單上的文本框的參數之一。 我注意到如果用戶在該文本框中輸入“blah”,那么我將獲得DateTime參數的Null值,並自動添加模型錯誤。 在這種情況下,添加的ModelState錯誤是“值'blah'無效”。

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

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

我會從您傳遞給TryUpdateModel / Update模型的白名單中刪除該特定文本框並“手動”驗證它,而不是讓它通過框架驗證。 或者,您可以嘗試遍歷ModelState錯誤集合,找到要刪除的那個,並刪除它 - 比如一旦找出想要刪除的那個,請使用RemoveItem。

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

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

您可以使DateTime參數為空。 然后,如果沒有提供任何內容,則不會將錯誤添加到ModelState。

public ActionResult Method(Datetime? date)
{} 

而不是

public ActionResult Method(Datetime date)
{}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM