有很多类似的帖子,但这对我不起作用。我现在已经尝试了20种不同的方式,所以如果有人能把我放在正确的轨道上,我会非常感激。
首先我尝试了这个。根据文档似乎是正确的,但正在发送的JSON只是元素id('元素'是jQuery元素ref)
if (valData.ValidationItems[i].Date) {
element.rules("add", {
remote: {
url: websiteBase + "Home/DateValidation",
type: "post",
data: {
Date: function () { return $("#" + element[0].id).val() },
Min: valData.ValidationItems[i].RangeMin,
Max: valData.ValidationItems[i].RangeMax
},
dataType: "json"
},
messages: { remote: valData.ValidationItems[i].ValidationMessage }
});
}
我试过的下一个工作一次,但随后锁定了浏览器
remote: function () {
var remoteData = {
Date: $("#" + element[0].id).val(),
Min: data.ValidationItems[i].RangeMin,
Max: data.ValidationItems[i].RangeMax
}
var remoteJSON = JSON.stringify(remoteData);
var r = {
url: websiteBase + "Home/DateValidation",
type: "post",
dataType: "json",
data: remoteJSON
}
return r;
}
这是使用jQuery validate 1.8,它是为MVC 3项目安装的版本。
答案 0 :(得分:0)
所以在尝试了大约40种不同的方法后,我找到了一种有效的方法。如果可能的话,jQuery验证远程确实尝试不将结果编码为JSON。在大多数情况下,它编码了数据"比如查询字符串。
remote: {
url: websiteBase + "Home/DateValidation",
type: "post",
dataType: "json",
data: JSON.stringify({
Date: $("#" + element[0].id).val(),
Min: valData.ValidationItems[i].RangeMin,
Max: valData.ValidationItems[i].RangeMax
})
}
答案 1 :(得分:0)
确定这个有效。关键是不要尝试使用远程功能将有效的JSON数据发送到服务器。不要指定contentType或dataType。确保您的控制器或Web服务准备好接收表单POST。此外,文档不正确,因为它表示如果您指定"数据"属性它将覆盖默认值。事实并非如此。最后,文档或其他帖子中关于检索远程函数中元素值的方法都不起作用。每次更新时触发事件并检索更新的元素值的唯一方法是使用" remote"方法的默认功能。在我的例子中,元素ID是一个变量,所以这是不可取的。
最后这对我有用,将3个值发送到服务器编码为表单后置参数。
remote: {
url: websiteBase + "Home/DateValidation",
type: "post",
cache: false,
data: {
Min: valData.ValidationItems[i].RangeMin,
Max: valData.ValidationItems[i].RangeMax
}
}
在控制器中,我使用
检索值和动态元素IDpublic ActionResult DateValidation(FormCollection parameters) {
bool valid = true;
try {
string date = parameters[0];
string elementID = parameters.Keys[0].ToString();
...