jQuery验证远程不发送正确的json数据

时间:2015-09-18 17:21:08

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

有很多类似的帖子,但这对我不起作用。我现在已经尝试了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项目安装的版本。

2 个答案:

答案 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
    }
}

在控制器中,我使用

检索值和动态元素ID
public ActionResult DateValidation(FormCollection parameters) { 
    bool valid = true;
    try {
        string date = parameters[0];
        string elementID = parameters.Keys[0].ToString();
   ...