使用 html.validationmessagefor 作为客户端错误消息
Using a html.validationmessagefor for a client side error message
我有一些文本字段的服务器端验证消息。字段 'title' 是必填字段服务器端,在 class 中具有“[Required]”数据属性,但这似乎只在回发或表单提交时进行检查。我将 'title' 文本字段保存在 jquery .change 事件中,下面是 sudo 代码。但我想使用我的验证消息来显示来自客户端检查的错误消息。不确定该怎么做?
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 中进行一些客户端检查,然后使用此元素显示客户端错误消息,我可以这样做吗?我只是想避免使用另一个隐藏元素。我知道我必须使用
data-valmsg-for="Overview.Title"
因为所有其他文本字段的其他数据属性都相同。
如果我想检查以确保 "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
}
});
您有几种方法可以做到这一点,但我认为这是最简单的方法:
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"
}
});
您可以通过执行类似的操作来添加未反映在服务器端的规则。然后你可以用同样的方式验证输入。
如果你想使用 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");}
});
的代码
在我发布的示例中,如果您开始输入 ISBN 而标题为空,您将收到错误消息。
在你的问题中不确定你想如何触发错误,所以我假设它是不同输入中的一个条目
我有一些文本字段的服务器端验证消息。字段 'title' 是必填字段服务器端,在 class 中具有“[Required]”数据属性,但这似乎只在回发或表单提交时进行检查。我将 'title' 文本字段保存在 jquery .change 事件中,下面是 sudo 代码。但我想使用我的验证消息来显示来自客户端检查的错误消息。不确定该怎么做?
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 中进行一些客户端检查,然后使用此元素显示客户端错误消息,我可以这样做吗?我只是想避免使用另一个隐藏元素。我知道我必须使用
data-valmsg-for="Overview.Title"
因为所有其他文本字段的其他数据属性都相同。
如果我想检查以确保 "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
}
});
您有几种方法可以做到这一点,但我认为这是最简单的方法:
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"
}
});
您可以通过执行类似的操作来添加未反映在服务器端的规则。然后你可以用同样的方式验证输入。
如果你想使用 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");}
});
的代码
在我发布的示例中,如果您开始输入 ISBN 而标题为空,您将收到错误消息。
在你的问题中不确定你想如何触发错误,所以我假设它是不同输入中的一个条目