我想替換MVC3中顯示的默認驗證消息,當您未能填寫必填字段或填寫無效值時顯示。我只解決了這個問題中的服務器端驗證問題。我的無效值自定義消息正在工作,但缺少必填字段的消息不適用。自定義DefaultModelBinder驗證消息
這是我做了什麼:
增加了一個叫做「App_GlobalResources文件」到web項目中的ASP.NET文件夾,該文件夾中,我把所謂的「DefaultMessages.resx」一個資源文件,其中包含下面的鍵和值:
PropertyValueInvalid:值,你輸入無效
PropertyValueRequired:此字段是必填項
(這些不是我將要使用的實際消息;他們將在不同的語言,這是我需要更換默認的主要原因。)
登記在Global.asax.cs中的DefaultModelBinder這樣的資源文件(注意我用的Ninject依賴注入):
public class MvcApplication : NinjectHttpApplication { ... protected override void OnApplicationStarted() { ... DefaultModelBinder.ResourceClassKey = "DefaultMessages"; ... } ... }
在我的模型我有一個DateTime屬性調用到期日期。由於DateTime不可空,因此該屬性是隱式需要的。 PropertyValueInvalid工程;我在ExpirationDate字段(例如30.02.2014)中提交了無效值之後,我的自定義消息將呈現在表單中。但是,如果我將該字段留空並提交,我只會得到默認的「ExpirationDate字段是必需的」。
我在這裏錯過了什麼?是PropertyValueRequired不是正確的名字?或者它不適用於隱式需要的屬性?我也嘗試在模型中添加一個明確的必需屬性,如下所示:
[Required]
public DateTime ExpirationDate{ get; set; }
但這沒什麼區別。什麼工作是添加自定義錯誤消息的屬性,例如像這樣:
[Required(ErrorMessage = "We need a date here!")]
public DateTime ExpirationDate{ get; set; }
但我不想這樣做,所有通常只需要一個通用的消息所需的性能。 (我知道我可以在必需屬性中引用資源文件中的通用消息,而不是直接陳述消息,但是這仍然給模型增加了混亂,這應該是不必要的。)
好像你不能設置'DefaultModelBinder'需要消息在資源文件上。問題答案MVC4,但顯然與MVC3相同。已經在這裏回答http://stackoverflow.com/questions/12545176/mvc-4-ignores-defaultmodelbinder-resourceclasskey – dgarbacz