[英]jquery validation: remove error message from form
我有一個帶有電子郵件字段和“獲取新聞通訊”復選框的表單。
<form method="post" class="form-horizontal" action="">
<input class="form-control" type="text" id="Email" name="Email" value="test@test.com" />
<span class="text-danger field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>
<input data-val="true" id="GetNewsletter" name="GetNewsletter" type="checkbox" value="true" />
</form>
電子郵件字段最初是可選的,但如果用戶選中獲取新聞通訊復選框,則必填字段。 我在客戶端使用jquery驗證添加了它。
$("#GetNewsletter").change(function () {
var checked = $(this).prop("checked");
if (checked) {
$('#Email').rules('add', { //set required rule
required: true,
messages: {
required: "Email is required."
}
});
}
else {
$('#Email').rules('remove', 'required'); //remove rule and call valid()
$('#Email').valid();
}
});
如果未選中該復選框,則刪除規則並調用valid()以重置輸入的狀態。 不幸的是,這不會刪除驗證消息。
有內置的方法來清除驗證消息嗎? 我想避免操縱標記,例如,刪除/添加驗證類。
您只能動態添加/刪除使用插件的方法1添加的規則。
$('form').validate({
rules: {
Email: {
required: true
}
}
});
如果還有其他required
,例如內聯屬性2 ,則將無法使用.rules('remove')
1 。
1根據文檔:
“僅處理通過rules-option或
rules("add")
指定的規則。”
2由於您使用的是ASP,因此.validate()
實例將由Unobtrusive Validation插件自動構建,並且具有聲明規則的內聯屬性。
底線:由於未刪除規則,因此消息不會清除。 而且,在使用內聯驗證屬性時,您不能動態禁用或刪除規則。
您的(不成功的)嘗試只會刪除視圖中的錯誤消息,並且您仍然需要在控制器方法中編寫代碼來驗證數據(客戶端驗證是一個不錯的選擇,但是可以輕松地繞過它,您必須在服務器)。
而是使用實現IClientValidatable
的條件ValidationAttribute
,以便同時獲得客戶端和服務器端驗證。 此類屬性的示例是萬無一失的 [RequiredIf]
或[RequiredIfTrue]
屬性,您可以將其應用於模型
[RequiredIfTrue("GetNewsletter", ErrorMessage = "...")]
public string Email { get; set; }
然后在視圖中
@Html.TextBoxFor(m => m.Email)
@Html.ValidationMessageFor(m => m.Email)
@Html.CheckBoxFor(m => m.GetNewsletter)
如果選中此復選框,並且“ Email
為空,則將顯示一條驗證消息(如果繞過客戶端驗證,則ModelState
在POST方法中將無效。
另外,如果要編寫自己的條件驗證屬性,請參閱《 ASP.NET MVC 3中驗證的完整指南-第2部分 》以獲取良好的指南。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.