我有以下情况。表单有一些输入,其中一些表示有“你不必填写此字段”等提示。现在,如果出现验证错误,我希望常规验证消息替换这些提示。当该字段再次有效时,提示不必再次显示(我不介意它是否显示出来)。
是否可以使用标准ValidationMessageFor帮助程序实现这一点?
我想我可以使用JS修补一些东西,因为我已经在监视包含类更改验证消息的元素(使用http://meetselva.github.io/attrchange/),所以我可以在验证时更改整个控制组的颜色错误。
在这种情况下,我只需要显示\隐藏提示,具体取决于验证错误是否可见。
答案 0 :(得分:0)
最后我使用的解决方案看起来像这样。我将每个输入与“control-group”div中的验证消息进行了封装。然后我使用attrchange来监控验证范围的变化。
在视图中:
<div class="control-group">
@Html.TextBoxFor(model => model.Something)
<p class="help-block">This is a hint.</p>
@Html.ValidationMessageFor(model => model.Something)
</div>
在css中:
.control-group.error .help-block
{
display:none;
}
在JS中:
function UpdateControlGroupErrorState(valmsg) {
valmsg = $(valmsg);
var controlGroup = valmsg.closest('.control-group');
if (controlGroup.find('.field-validation-error').length > 0) {
if (!controlGroup.hasClass("error")) {
controlGroup.addClass("error");
}
}
else {
if (controlGroup.hasClass("error")) {
controlGroup.removeClass("error");
}
}
}
function SetupGroupValidate(validators) {
validators.each(function () {
UpdateControlGroupErrorState(this);
$(this).attrchange({
trackValues: true,
callback: function (e) {
if (e.attributeName == "class") {
UpdateControlGroupErrorState(this);
}
}
});
});
}
$(function () {
var validators = $('.control-group span[data-valmsg-for]');
SetupGroupValidate(validators);
});