使用html.validationmessagefor获取客户端错误消息

时间:2015-04-17 18:41:00

标签: javascript jquery html asp.net-mvc client-side-validation

我的某些文本字段有服务器端验证消息。字段'title'是必需的字段服务器端,在类中具有'[Required]'数据属性,但这似乎只在回发或表单提交上检查。我正在jquery .change事件中保存'title'文本字段,下面是sudo代码。但我想使用我的validationmessage来显示来自客户端检查的错误消息。不知道怎么做这个?

HTML

@Html.ValidationMessageFor(model => model.Overview.Title, "", new { @class = "text-danger" })

呈现为

<span class="field-validation-valid text-danger" data-valmsg-for="Overview.Title" data-valmsg-replace="true"></span>

如果我想在javascript中进行一些客户端检查,然后使用此元素显示客户端错误消息,我可以这样做。我只想保护自己使用另一个隐藏的元素。我知道我必须使用

  

数据valmsg换= “Overview.Title”

因为所有其他文本字段的其他数据属性相同。

如果我想检查以确保“标题”的长度大于1,那么在这里显示客户端错误消息的最佳方法是什么?

也许像 -

$('#Overview_Title').change(function() {
    var title = $(this).val();
    if (title.length == 0) {
      // show error message "title has to be a value to save"
      }
    else {
      // do other work like save to db
      }
  });

2 个答案:

答案 0 :(得分:3)

你有几种方法可以做到这一点,但我认为这是最简单的方法:

默认情况下,MVC会将jquery.validate javascript库捆绑到您的页面中。由于您已经使用[Required]属性标记了该字段,因此Html.EditorFor会将正确的属性绑定到您的HTML中,以便在必要时进行验证。

要使当前逻辑使用最小的更改,您可以在输入字段周围添加<form>标记。我认为您需要使用validate方法才能开箱即用。然后你的javascript会变成这样的东西:

$('#Overview_Title').change(function() {
if ($(this).valid()) {
  // do your stuff
  }
else {
  // error message displayed automatically. don't need to do anything here unless you want to
  }
});

这样您就可以使用Required属性设置错误消息文本,ValidationMessageFor应显示错误消息,而无需您付出额外的努力。

查看此plunkr作为概念证明:http://plnkr.co/edit/ip04s3dOPqI9YNKRCRDZ?p=preview

修改

我不是肯定的我理解你的后续问题。但是如果你想动态地向一个字段添加一个规则,你可以沿着这些方向做一些事情:

$( "#someinput" ).rules( "add", {
 required: true,
 messages: {
 required: "a value is required to save changes"
 }
});

您可以通过执行此类操作来添加未反映在服务器端的规则。然后你可以用同样的方式验证输入。

答案 1 :(得分:0)

如果您想使用jquery进行100%客户端验证,可以使用以下内容:

$('#Overview_ISBN').on('input', function() {
    var input=$('#Overview_Title');
    var is_name=input.val();
    if(is_name){input.removeClass("invalid").addClass("valid");}
    else{input.removeClass("valid").addClass("invalid");}
});

这里是JSFiddle link

的代码

在我发布的示例中,如果您开始输入ISBN并且标题为空,您将收到错误消息。

在你的问题中不确定你想如何触发错误,所以我认为它是一个不同输入的条目