【发布时间】:2013-12-12 07:52:10
【问题描述】:
我对 asp.net MVC 还是很陌生。我在将客户端验证错误附加到 MVC 中的验证摘要列表时遇到问题。在客户端提交点击功能,即使表单有验证错误,validation-summary-errors div也始终为空。
我用代码sn-p详细解释一下。我提供的sn-p就是我的示例应用程序。
我通过 web.config 在我的应用程序中启用了客户端验证,并在我的布局页面中包含了默认的 jquery 验证库。
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/jqueryval")
MVC 视图
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<legend>Registration Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
</li>
<li>
@Html.LabelFor(m => m.ConfirmPassword)
@Html.PasswordFor(m => m.ConfirmPassword)
</li>
</ol>
<input type="submit" value="Register" id="btnSubmit" />
</fieldset>
}
查看模型在下方
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
我用过的脚本文件如下。
<script type="text/javascript">
$(function () {
$("#btnSubmit").click(function (e) {
e.preventDefault();
var errorSummary = $('.validation-summary-errors');
if (errorSummary.length == 0) {
$('#listError').remove();
$('<div class="validation-summary-errors"></div>').insertAfter($('.validation-summary-valid'));
$(".validation-summary-errors").append("<ul id='listError'><li>You cannot enter more than 20 characters.</li></ul>");
}
else if (errorSummary.length == 1) {
$('#listError').remove();
$(".validation-summary-errors").append("<ul id='listError'><li>You cannot enter more than 20 characters.</li></ul>");
}
return false;
});
});
</script>
当我没有 jquery 提交点击功能时,一切都按预期工作。模型验证在提交点击时在客户端触发。
除了模型验证之外,我还有一些 jquery 客户端验证需要附加到现有的验证摘要列表中。但是“validation-summary-errors” div 在提交点击功能中始终为空。所以每次 $('.validation-summary-errors').length 都是 0。
有人可以帮助我了解我哪里出错了吗?
更新代码
$(function () {
$("#btnSubmit").click(function (e) {
var IsValid = validateForms();
if (!IsValid) {
e.preventDefault();
}
});
});
function validateForms() {
var blnValid = false;
var valMsg = ValidateDynamicControls();
if ($('#MemberForm').valid()) {
$(".validation-summary-errors").empty();
blnValid = true;
}
if (valMsg != '') {
blnValid = false;
var errorSummary = $('.validation-summary-errors')
if (errorSummary.length == 1 && errorSummary[0].innerHTML != '' && errorSummary[0].innerHTML != undefined) {
$(".validation-summary-errors ul").append(valMsg);
} else {
$('#listError').remove();
$('<div class="validation-summary-errors"></div>').insertAfter($('.validation-summary-valid'));
$(".validation-summary-errors").append("<ul id='listError'>" + valMsg + "</ul>");
}
}
return blnValid;
}
function ValidateDynamicControls() {
var strAliasValMsg = 'The string is not valid.';
return strAliasValMsg;
}
【问题讨论】:
-
您从未接受过任何问题的答案?这就解释了为什么没有人愿意为你提供答案……
-
我明白了。那是我的错误。往前走,永远不会这样做。
标签: javascript jquery asp.net-mvc validation