2011-05-18 63 views
9

我一直在搜索相当长的一段时间,一直未能找到答案。asp.net mvc 3 jquery手动添加验证消息

我正在使用asp.net MVC 3与不显眼的验证。我的模型绑定了数据注释以进行简单验证(必填字段,正则表达式等)。但是,我有更复杂的验证发生在服务器上。我正在做一个ajax文章,它返回来自我的领域模型的验证add'l消息。我想要做的就是将这些验证消息放在现有的窗体上。我不想使用部分视图,因为我真正拥有的是消息回来,并且不需要刷新整个视图。另外,我没有添加新的规则或新的输入到表单中,因此$ .validator.unobtrusive.parse不起作用。这些只是我想要放在表单上的消息。 $ .post调用返回字段受到影响的消息列表以及验证消息。

这里是什么样的,我希望对你有所帮助

每请求做

$.post(url, { someData}, function (data) { 
     for (message in data.Messages) { 
      $("#form").validate().addMessage(message.Field, message.Text); 
     } 
    }); 

谢谢,这里的返回JSON的样品,这是相当简单的。

{"id":0,"messages":["Level":0,"Message":"Style is required","Name":"Style"}],"operationResult":false} 

消息是包含严重性级别,错误属性和错误消息的对象的列表。我会使用消息对象中的名称来匹配它在表单上的位置。

+0

仅供参考:部分视图并不意味着您必须刷新整个视图。 – 2011-05-19 18:46:27

+0

你能解释一下吗?您至少必须刷新绑定到相关模型的视图部分。我有一些下拉框与一吨物品,我并不热衷于重建,并roundtraipping整个选择列表 – 2011-05-26 22:08:35

+0

这将是更容易,如果你提供的答复消息(可能是一种JSON形式)与验证错误。那么我们就可以更容易地阐述解决方案。所以你提出了一个Ajax请求。告诉我们什么回到客户端... – 2011-05-26 22:31:30

回答

15

我有完全一样的要求,我实际上找到了以下方法。

var validator = $("form").validate(); 
validator.showErrors({field : "Error Message"}) 
+0

不错!这似乎工作,但我该怎么做,当这个领域是动态的。它以字符串的形式出现在我的面前,您无法用变量名定义对象文字。它在我的回复中作为message.Name回来。这是比其他任何问题更多的JavaScript问题。我的想法是做这样的事情var showMeErrors; showMeErrors [message.Name] = message.Message;但是这并不起作用 – 2011-06-16 21:14:39

+0

没关系,我找到了。忘了用{}定义我的对象为空。感谢您的出色解决方案。 – 2011-06-16 21:17:06

+0

奇怪的是,它看起来像validator.resetForm()不起作用,当你使用这 – 2011-06-16 21:35:20