9

我有一个隐藏字段,并对其进行验证,如下所示

@Html.HiddenFor(m => m.Rating)
@Html.ValidationMessageFor(m => m.Rating)

Rating属性Range应用了验证器属性,范围为 1-5。这被放在一个带有提交按钮的表单中。

然后我得到了以下jquery,它在某些用户事件的隐藏字段中设置了值(基本上用户点击了一些星星来评分)

$(".star").click(function(){
    $("#Rating").val(2);
});

现在,如果我在没有设置隐藏字段的用户事件的情况下提交表单,则验证有效。错误消息显示正确,它适用于所有客户端。

现在,在这种情况下,如果我点击星号,调用上面的 javascript 设置隐藏字段,验证错误消息不会消失。我可以在隐藏变量有一些有效值后提交表单。但我期望客户端验证应该有效。(当隐藏变量设置了一些有效值时,验证错误应该消失)

最初我认为,jquery 验证会在一些特殊事件上被调用,所以我尝试自己提高 click、change、keyup、blur 和 focusout 事件,如下所示

$(".star").click(function(){
    $("#Rating").val(2);
    $("#Rating").change();
});

但这仍然行不通。错误消息一旦出现,就不会消失。

4

5 回答 5

5

您可以使用 div 将隐藏字段包装在某处但仍位于<form>. 添加 css 将其踢到外太空。

<div style="position:absolute; top:-9999px; left:-9999px">
<input id="Rating" type="hidden" name="rating" >
</div>

然后将以下标签添加到要显示错误的位置:

<label for="rating" class="error" style="display:none">I am an an error message, please modify me.</label>
于 2011-11-14T15:27:38.790 回答
5

客户端验证忽略隐藏字段。您可以动态设置“忽略”选项,但为了使其正常工作,我在 .js 文件中直接执行了以下操作。

现在这应该可以解决问题。

在我的aspx...

<%: Html.HiddenFor(model => model.age, new { @class="formValidator" }) %>

在 jquery.validate.js

ignore: ":hidden:not('.formValidator')",
于 2013-07-22T15:47:00.507 回答
5

事实证明这是一个非常有趣的问题。默认的“忽略”设置是忽略隐藏字段。该字段隐藏在 jQuery ui 插件中。我只是在要验证的渲染输入中添加了一个名为“includeCheckBox”的类,并将以下代码行放入...

var validator = $('#formMyPita').validate();
validator.settings.ignore = ':hidden:not(".includeCheckBox")';
if ($('#formMyPita').valid()) {....
于 2013-12-18T19:14:28.010 回答
2

在设置隐藏字段值的代码中,手动调用表单验证,如下所示:

$("form").validate().form();
于 2011-10-17T18:36:15.807 回答
1

我认为这是因为隐藏的输入不会触发任何这些事件。

您可以做的是使用 a<input type="text" style="display:none" />而不是隐藏字段;

@html.TextBoxFor(m => m.Rating, new {display = "display:none"})
于 2011-10-17T08:07:09.740 回答