我可以在有效数据上显示ValidationMessageFor显示提示吗?

时间:2013-11-28 14:47:09

标签: asp.net-mvc-4 razor

我有以下情况。表单有一些输入,其中一些表示有“你不必填写此字段”等提示。现在,如果出现验证错误,我希望常规验证消息替换这些提示。当该字段再次有效时,提示不必再次显示(我不介意它是否显示出来)。

是否可以使用标准ValidationMessageFor帮助程序实现这一点?


我想我可以使用JS修补一些东西,因为我已经在监视包含类更改验证消息的元素(使用http://meetselva.github.io/attrchange/),所以我可以在验证时更改整个控制组的颜色错误。

在这种情况下,我只需要显示\隐藏提示,具体取决于验证错误是否可见。

1 个答案:

答案 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);
});