Asp.net-Mvc

如何在 MVC 中更改由 @Html 助手生成的“數據驗證編號”消息驗證

  • January 28, 2011

假設這個模型:

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 才能接受您的屬性。

引用自:https://stackoverflow.com/questions/4828297