我試圖使用Data Annotations,jQuery Validation和jQuery Unobtrusive validation驗證Asp.net Core 2.0應用程序中的HTML表單,正如文檔強烈建議的那樣。我也有一些自定義的Javascript來在通知窗口中顯示錯誤消息。如何在Asp.net Core 2中使用jQuery獲取已翻譯的ModelState錯誤消息?
我有一個模型,看起來像這樣:
class Model
{
[Required(ErrorMessage = "Required")]
[Display(Name = "Email")]
[EmailAddress(ErrorMessage = "ValidEmail")]
public string Email { get; set; }
}
多次嘗試後,我得到了Asp.net發出的input
標籤準備驗證,在正確的本地化錯誤消息:
<input class="form-control input-validation-error" type="email"
data-val="true" data-val-email="L'adresse e-mail est invalide."
data-val-required="Le champ E-mail est obligatoire." id="Email"
name="Email" value="[email protected]" aria-describedby="Email-error">
我已成功地在提交表單之前獲得了客戶端驗證,。 jQuery驗證正確檢測到一個空字段,我可以使用Javascript顯示來自data-val-required
的消息。爲了完整起見,我有這樣的事情處理的消息:
function onFormValidationFailed(e, args: JQueryValidation.Validator) {
ErrorManager.clearErrors();
for (var error in args.errorList) {
ErrorManager.addError(args.errorList[error].message);
}
}
$("form")
.on("invalid-form.validate", onFormValidationFailed);
然而,如[email protected]
一個值由客戶端驗證接受等形式提交。該錯誤然後被Asp.net模型驗證捕獲。在我的行動中,我可以看到this.ModelState.IsValid
確實是false
,正如您在上面所看到的,該字段被正確識別爲與類input-validation-error
有差錯。
我的問題是,我不知道如何獲得相關的錯誤信息來顯示它。
我試圖調用$("form").validate()
當頁面加載試圖觸發驗證,但我沒有收到任何錯誤消息。 (或至少invalid-form.validate
事件沒有被觸發。)
作爲備用解決方案,我嘗試使用<div asp-validation-summary="All"></div>
讓Asp.net將錯誤消息注入某個地方,我可以使用Javascript獲取它們。但是這很快就變成了一個死衚衕,因爲這條消息沒有被本地化!
<div class="validation-summary-errors" data-valmsg-summary="true">
<ul>
<li>ValidEmail</li>
</ul>
</div>
事實上,我檢查了服務器端和ModelState
收集不不包含本地化的消息。
誰能幫我找到一個解決方案,其中,在與一個無效的模型狀態來從服務器返回的,我可以得到的,通過JavaScript,相關本地化數據註解的錯誤信息,所以我可以將它們顯示給用戶? (或建議更好的做法?)