JQuery使用Json调用控制器/操作

JQuery使用Json调用控制器/操作,jquery,asp.net-mvc,Jquery,Asp.net Mvc,我有一个搜索页面,页面顶部是带有搜索按钮的搜索条件。屏幕底部是按下搜索按钮时的结果。在这种情况下,我有6个不同的搜索条件,用户可以输入。我希望将所有条件捆绑到一个类中,以便我的控制器操作可以将Json对象作为一个类来读取。使用FireBug,我可以看到我的Json是正确构建的。使用调试器,我知道我的控制器/操作将被触发。但是,当我在控制器/操作中使用调试器查看类对象时,所有属性都为null或零 控制器 JavaScript/JQuery $.ajax({ url:“GetStudentByCr

我有一个搜索页面,页面顶部是带有搜索按钮的搜索条件。屏幕底部是按下搜索按钮时的结果。在这种情况下,我有6个不同的搜索条件,用户可以输入。我希望将所有条件捆绑到一个类中,以便我的控制器操作可以将Json对象作为一个类来读取。使用FireBug,我可以看到我的Json是正确构建的。使用调试器,我知道我的控制器/操作将被触发。但是,当我在控制器/操作中使用调试器查看类对象时,所有属性都为null或零

控制器

JavaScript/JQuery


$.ajax({
url:“GetStudentByCritera”,
键入:“POST”,
数据:dataToSend,
数据类型:“json”,
contentType:“应用程序/json;字符集=utf-8”,
发送前:客户端验证,
成功:功能(结果){
警报(result.result);
$('#SearchResult').html(result.result.show();
//解锁用户界面
},
错误:函数(XMLHttpRequest、textStatus、errorshown){
//解锁用户界面
//不知道如何处理错误
警报(“发布到“GetStudentByCritera”时出错”)
//通常只会抛出textStatus或ErrorRown中的一个
//我会有消息的
this;//此ajax请求的选项
}
});
函数BuildJson(){
//构建Json
var dataForClass={
“StudentSearchCriteraCV”:[{
“StudLname”:$(“输入[name='StudentSearchCriteraCV.StudLname']”)val(),
“StudFname”:$(“输入[name='StudentSearchCriteraCV.StudFname']”)val(),
“Ssn”:$(“输入[name='StudentSearchCriteraCV.Ssn']”)val(),
“StudId”:$(“输入[name='StudentSearchCriteraCV.StudId']”)val(),
“Sex”:$(“输入[name='StudentSearchCriteraCV.Sex']”)val(),
“种族”:$(“输入[name='StudentSearchCriteraCV.Race']”)val()
}]
};
返回$.toJSON(dataForClass);
}
函数ClientSideValidate(){
//阻止用户界面
警报(“在客户端验证中”);
//如果出现错误,请取消阻止用户界面
//如果客户端数据良好,则返回true。
返回true;
}

您需要创建一个继承自ActionFilterAttribute的操作筛选器。请查看此处或此处,以了解有关如何构建此函数的更多详细信息。

我认为您的JSON值需要在引号中,除非它是一个数字

"StudFname": '"' + $("input[name='StudentSearchCriteraCV.StudFname']").val() + '"',
我没有使用.toJSON(),但我相信它会将JSON对象转换为字符串。既然创建对象只是为了立即将其转换为字符串,为什么不首先将其创建为字符串呢?这就是我遇到这个问题时所做的(调试器显示值为零)


ajax调用只是一个异步HTTP post,因此数据参数只能是键值对,而不是JSON对象。如果将dataForClass展平,它将起作用

<script>
    $.ajax({
        url: "GetStudentByCritera",
        type: 'POST',
        data: dataToSend,
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        beforeSend: ClientSideValidate,
        success: function (result) {
            alert(result.Result);
            $('#SearchResult').html(result.Result).show();
            // UnBlock UI
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            // UnBlock UI

            // not sure how to handel error
            alert("error happen when posting to 'GetStudentByCritera'")

            // typically only one of textStatus or errorThrown
            // will have info
            this; // the options for this ajax request
        }


    });

    function BuildJson() {
        // building Json

        var dataForClass = {
            "StudentSearchCriteraCV": [{
                "StudLname": $("input[name='StudentSearchCriteraCV.StudLname']").val(),
                "StudFname": $("input[name='StudentSearchCriteraCV.StudFname']").val(),
                "Ssn": $("input[name='StudentSearchCriteraCV.Ssn']").val(),
                "StudId": $("input[name='StudentSearchCriteraCV.StudId']").val(),
                "Sex": $("input[name='StudentSearchCriteraCV.Sex']").val(),
                "Race": $("input[name='StudentSearchCriteraCV.Race']").val()
            }]
        };

        return $.toJSON(dataForClass);
    }

    function ClientSideValidate() {
        // Block the UI
        alert("In the ClientSideValidate");

        // if error UNBlock UI
        // return true if client side data is good.

        return true;
    }
</script>
"StudFname": '"' + $("input[name='StudentSearchCriteraCV.StudFname']").val() + '"',
var dataForClass = '{ "StudentSearchCriteraCV" : [{ ' +
        '"StudLname": "' + $("input[name='StudentSearchCriteraCV.StudLname']").val() + '", ' +
        '"StudFname": "' + $("input[name='StudentSearchCriteraCV.StudFname']").val() + '", ' +
        '"Ssn": "' + $("input[name='StudentSearchCriteraCV.Ssn']").val() + '", ' +
        '"StudId": ' + $("input[name='StudentSearchCriteraCV.StudId']").val() + ', ' + //assuming StudID is a number
        '"Sex": "' + $("input[name='StudentSearchCriteraCV.Sex']").val() + '", ' +
        '"Race": "' + $("input[name='StudentSearchCriteraCV.Race']").val() +'" ' +
        '}]}';