2011-10-17 96 views
9

我有与它验证一个隐藏字段如下客户端验证未在asp.net MVC工作隐藏字段3

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

Rating属性已Range validator属性施加范围为1- 5。这是放在一个提交按钮的形式。

我有那么有以下jQuery的,设置在一些用户事件中的隐藏字段中的值(上一些明星基本上用户点击率)

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

现在,如果我提交表单而没有设置用户事件隐藏的领域,验证工作。错误消息显示正确,并且它适用于所有客户端。

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

最初我想,jQuery的验证将在一些特殊事件中被调用,所以我尝试提高点击,更改,键盘,模糊和我自己的聚焦事件如下

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

但是这仍然不起作用。错误信息一旦出现,根本不会消失。

回答

2

在其中设置隐藏字段的值的代码,手动调用验证的形式,像这样:

$("form").validate().form(); 
+0

我不认为你需要form以上声明。 –

+0

为了让表单上的错误消息得到更新,'form()'是必需的。由于问题是关于即时更新错误消息,因此需要。 – counsellorben

+0

@counsellorben工作就像一个魅力 – Suhas

1

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

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

@html.TextBoxFor(m => m.Rating, new {display = "display:none"}) 
+0

这并不工作,要么。我最好的猜测是,在设置隐藏变量之后,我需要提出一些JavaScript事件,例如更改/模糊,以再次启用验证。我不确定哪个事件是 – Suhas

+0

是的,对于隐藏文本框,您将激发.change()事件。我认为对于隐藏的输入,没有默认的更改事件要附加到。 –

+0

不幸的是,这是行不通的。在设置隐藏文本框值后,我明确地触发了更改事件。但验证错误不会消失 – Suhas

5

你可以放的地方,但仍然是<form>内一个div包裹你的隐藏字段。添加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> 
+0

我没有更多的工作在这个项目上,所以没办法,我可以试试这个。但我喜欢这个建议,所以竖起大拇指:) – Suhas

+0

好主意,今天救了我的培根... –

+0

这个“是”解决方案。谢谢。 – Remotec

5

客户端验证忽略隐藏字段。你可以动态地设置“忽略”选项,但为了让它起作用,我直接在.js文件中做了以下操作。

现在这应该做的伎俩。

在我的aspx ...

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

在jquery.validate.js

ignore: ":hidden:not('.formValidator')", 
5

事实证明,这是一个非常有趣的问题。默认的“忽略”设置忽略隐藏的字段。该字段隐藏在jQuery ui插件中。我只是增加了一个名为“includeCheckBox”类来呈现的输入我想验证,并把下面的代码行...

var validator = $('#formMyPita').validate(); 
validator.settings.ignore = ':hidden:not(".includeCheckBox")'; 
if ($('#formMyPita').valid()) {....