显然,unobtrusive js
和ModelState
错误无法一起发挥。我想要完成的是两件事。当发生ModelState
或客户端错误时,它将由validation-summary-errors类显示。
我遇到的问题是,而不是使用助手,
<div class="validation-summary-errors" data-valmsg-summary="true">
<ul style="list-style-type:none;"></ul>
</div>
它不会显示ModelState
错误,因此我尝试使用以下代码
代码:
if (!ViewData.ModelState.IsValid)
{
<div class="validation-summary-errors" data-valmsg-summary="true">
<ul style="list-style-type:none;"></ul>
</div>
}
else
{
@Html.ValidationSummary()
}
但是由于帮助器,我无法格式化输出(就像从列表中删除子弹一样)!
以下是javascript:
$(document).ready(function () {
$('form').each(function () {
var theForm = $(this);
theForm.submit(function () {
if ($(this).valid()) {
if ($(this).find('.validation-summary-valid').length) {
$('.validation-summary-errors').hide();
}
} else {
if ($(this).find('.validation-summary-errors').length) {
$('.validation-summary-errors')
.addClass('alert alert-danger');
}
}
});
});
});
答案 0 :(得分:2)
使用此
@Html.ValidationSummary(true, "", new { @class = "validation-summary-errors" })
答案 1 :(得分:0)
不引人注目的模特状态确实可以很好地发挥作用。
您在验证失败时对视图进行了硬编码以显示空列表,并且在验证成功时仅使用Razor帮助程序,因此它将始终显示空列表。
只使用@Html.ValidationSummary()
而不使用if
块。如果模型有效,它将自动为空。
如果您预期没有显示模型验证消息,请在if (ModelState.IsValid)
上的控制器中设置断点并检查模型。然后检查您的数据注释。出于调试目的,您可以手动添加模型状态错误ModelSatate.AddModelError("fieldname", "This field has an error");
,以证明Razor帮助程序正在运行。
答案 2 :(得分:0)
感谢您的投入。 我最终删除了ValidationSummary()的if语句。为了处理我最终做的事情,添加类似于上面显示的第二个小脚本,但是对于window.onload事件。通过这种方式,它可以捕获ModelState错误,而上面的错误可以处理突兀。