【问题标题】:asp.net mvc 3 jquery adding validation message manuallyasp.net mvc 3 jquery 手动添加验证消息
【发布时间】:2011-05-18 17:32:22
【问题描述】:

我已经搜索了很长时间,但无法找到答案。

我正在使用带有不显眼验证的 asp.net MVC 3。我的模型绑定了用于简单验证的数据注释(必填字段、正则表达式等)。但是,我在服务器上进行了更复杂的验证。我正在做一个 ajax 帖子,它返回来自我的域模型的验证添加消息。我要做的就是将这些验证消息放在表单上以代替现有的。我不想使用部分视图,因为我真正得到的只是返回的消息,并且不需要刷新整个视图。此外,我不会向表单添加新规则或新输入,因此 $.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}

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

【问题讨论】:

  • 仅供参考:部分视图并不意味着您必须刷新整个视图。
  • 你能解释一下吗?您至少必须刷新绑定到相关模型的视图部分。我有一些包含大量项目的下拉框,我不太热衷于重建它并往返整个选择列表
  • 如果您提供带有验证错误的回复消息(可能以 JSON 的形式)会更容易。这样我们就更容易详细说明解决方案了。因此,您提出了一个 Ajax 请求。向我们展示返回给客户的内容...
  • 我知道我可以做一些类似 $('span[data-valmsg-for=Name').text(message) 的事情,但这让我有点紧张,直接修改它。我假设/希望 html 5 属性不会改变。如果数据注释确实触发了某些事情,那么后续验证会发生什么。我将对其进行测试,但这似乎不是一个好的解决方案
  • 您找到更适合您的方法了吗?我遇到了同样的问题。

标签: asp.net-mvc-3 jquery-validate unobtrusive-validation


【解决方案1】:

我的需求一模一样,居然找到了下面的方法。

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

【讨论】:

  • 不错!这似乎可行,但是当该字段是动态的时我该怎么做。它以字符串的形式出现,您不能使用变量名定义对象文字。它在我的回复中以 message.Name 的形式返回。这是比其他任何事情都更多的 javascript 问题。我的想法是做这样的事情 var showMeErrors; showMeErrors[message.Name] = message.Message;但这没有用
  • 没关系,我找到了。忘记使用 {} 将我的对象定义为空。感谢您提供出色的解决方案。
  • 奇怪的是,当您使用它时,validator.resetForm() 似乎不起作用
  • 我最终不得不根据 css 类手动清除它们,这不是很好。 @rohan 你必须处理这种情况吗
  • @ChrisCap 你试过:validator.resetForm() 来清除错误信息吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
相关资源
最近更新 更多