我有一个表单允许我在单个HTML表单中设置多个实体(例如书籍)的值。该页面的ASP.NET MVC视图采用包含List<Book>
的模型。迭代后,为每本书呈现表单元素。
让我们假设我唯一的验证规则是书名是必需的。
如果用户未能输入任何书名,那么我想使用css类突出显示所有相关的书名文本框,并显示一次只显示“需要书名”的提醒。
我想使用jQuery验证插件来实现这一目标。
documentation告诉我们,如果我们要为元素设置自定义错误消息,我们会使用name
部分中相关HTML表单元素的messages:
属性来执行此操作。 validate()
设置调用。
e.g。 (我的HTML元素的标题的<{1}}
name
但是,这似乎与ASP.NET MVC模型绑定在绑定到列表时需要使用$(".selector").validate({
rules: {
title: "required",
},
messages: {
title: "Book titles must be set",
}
})
属性的方式不兼容,因为它使用了每个表单元素的name
属性非常具体的语法,例如
name
(摘自Haacked)
对于jQuery验证而言,<form method="post" action="/Home/Create">
<input type="text" name="[0].Title" value="Curious George" />
<input type="text" name="[0].Author" value="H.A. Rey" />
<input type="text" name="[0].DatePublished" value="2/23/1973" />
<input type="text" name="[1].Title" value="Code Complete" />
<input type="text" name="[1].Author" value="Steve McConnell" />
<input type="text" name="[1].DatePublished" value="6/9/2004" />
<input type="text" name="[2].Title" value="The Two Towers" />
<input type="text" name="[2].Author" value="JRR Tolkien" />
<input type="text" name="[2].DatePublished" value="6/1/2005" />
<!-- There could be several more books in the form... -->
<input type="submit" />
属性的这些冲突用法是否是一个交易破坏者?
答案 0 :(得分:1)
这就是我所做的(减少代码解释)
创建一个全局变量来保存验证消息,名为:validationMessages
在jquery验证的errorPlacement选项中,我有:
errorPlacement: function (error, element) { validationMessages += $(error).text() + '<br />'; },
然后这是我的提交表格功能......
function submitForm()
{
validationMessages = '';
var valid = true;
// do more/other/custom validation and css manipulation here
// if item not valid, set valid = false and add to validationMessages as in errorPlacement
if ($("#MainForm").valid() && valid)
{
$("#MainForm").submit();
}
else
{
// Show Message eg: mine looks like showAlert('Please complete the form', validationMessages, '600');
}
}
答案 1 :(得分:1)
不幸的是,由于上面提到的原因,你不能使用带有jquery验证器的字符“[0] .Title”。 Jquery验证器使用HTML元素的name属性来构建javascript对象,以设置验证规则和验证消息。
一种解决方案是在使用jquery验证器之前更改name属性的值,然后在将表单发布到服务器之前将其设置回来。但是,这只有在客户端没有任何内容的情况下才会起作用,具体取决于“[0] .Title”之类的名称。