Asp.net-Mvc
如何在 MVC 中更改由 @Html 助手生成的“數據驗證編號”消息驗證
假設這個模型:
Public Class Detail ... <DisplayName("Custom DisplayName")> <Required(ErrorMessage:="Custom ErrorMessage")> Public Property PercentChange As Integer ... end class和觀點:
@Html.TextBoxFor(Function(m) m.PercentChange)將繼續這個html:
<input data-val="true" data-val-number="The field 'Custom DisplayName' must be a number." data-val-required="Custom ErrorMessage" id="PercentChange" name="PercentChange" type="text" value="0" />我想自定義
data-val-number我猜想生成的錯誤消息,因為PercentChange它是一個Integer. 我一直在尋找這樣的屬性來改變它,range或者任何相關的東西都不起作用。我知道有機會編輯不顯眼的 js 文件本身或在客戶端覆蓋它。
data-val-number我想像伺服器端的其他人一樣更改錯誤消息。
這並不容易。預設消息作為嵌入資源儲存到
System.Web.Mvc程序集中,獲取的方法是內部密封內部類 (System.Web.Mvc.ClientDataTypeModelValidatorProvider+NumericModelValidator.MakeErrorString) 的私有靜態方法。就好像微軟編碼的那個人隱藏了一個最高機密:-)您可以查看以下描述可能解決方案的部落格文章。您基本上需要將現有的ClientDataTypeModelValidatorProvider替換為自定義的。
如果你不喜歡你需要做的硬核編碼,你也可以用一個字元串替換你的視圖模型中的這個整數值,並在它上面有一個自定義驗證屬性,它將進行解析並提供一個自定義錯誤消息(甚至可以本地化)。
您可以通過在呈現欄位時自己提供data-val-number屬性來覆蓋消息。這會覆蓋預設消息。這至少適用於 MVC 4。
@Html.EditorFor(model => model.MyNumberField, new { data_val_number=“提供一個整數,伙計!” })
請記住,您必須在屬性名稱中使用下劃線,Razor 才能接受您的屬性。