MVC - 显示验证消息以代替Label

时间:2013-10-16 11:07:49

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-validation

假设这是我的观点...

<div class="control-group">
         @Html.LabelFor(model => model.Title, new { @class = "control-label" })
         @Html.ValidationMessageFor(model => model.Title, null, new { @class = "help-inline" })
         <div class="controls">
            @Html.EditorFor(model => model.Title)

         </div>
      </div>

如果出现错误我们如何隐藏Label并显示validation message代替Label

请在此建议...

2 个答案:

答案 0 :(得分:0)

只有在ModelState有效时才能显示Label:

<div class="control-group">
    @if (this.ViewData.ModelState.IsValid)
    {
        @Html.LabelFor(model => model.Title, new { @class = "control-label" })
    }
    @Html.ValidationMessageFor(model => model.Title, null, new { @class = "help-inline" })
    <div class="controls">
        @Html.EditorFor(model => model.Title)
    </div>
</div>

请注意,如果您正在使用客户端验证,则还需要连接客户端上的validate方法并切换相应的标签可见性。

答案 1 :(得分:0)

只是为了赞美Darin的答案,如果您使用客户端验证,则需要执行类似

的操作
$("#myForm").validate({
    invalidHandler: function(event, validator) {
        $('.control-label').hide();
    }
});

否则标签不会隐藏。

当页面加载时,仍然值得检查ModelState.IsValid,尽管用户已禁用JS。