Ajax将null值传递给控制器

时间:2015-08-27 17:18:54

标签: javascript ajax asp.net-mvc model-view-controller asp.net-ajax

我有一个包含ID列表的下拉列表。客户将选择一个,它将反映页面上的总价格。我正在创建一个ajax调用,当从Dropdown中提取不同的ID时,它会更新总数。

$("#BrandId").on('focus', function () {
    // Store the current value on focus and on change
    previous = this.value;
}).change(function () {
    alert("Previous: " +previous);
    sel = this.value;
    alert("Selected: " +sel);
    $.ajax({
        cache: false,
        type: "get",
        contentType: "application/json; charset=utf-8",
        url: '@Url.Action("GetBrandCost", "Shocks")',
        data: JSON.stringify({ idp: previous, id: sel }),
        dataType: "json",
        aysnc: false,
        success: function (data1) {
            alert(data1);
                //ShockTotal = $("#ShockTotal").html();
                //ShockTotal = ShockTotal / 1;
                ////ShockTotal = ShockTotal - data1;
                //$("#ShockTotal").html(data1);

        }
    });
});

警报工作正常,但是ajax没有将这些ID传递给控制器​​,控制器只是接收空值。

 public decimal GetBrandCost(string idp, string id)
    {
        decimal costp = 0;
        decimal cost = 0;
        if (id == "" || id == null || idp == "" || idp == null)
        {
            return 0;
        }
        ShockBrand brandp = db.ShockBrands.Find(idp);
        costp = brandp.Cost;
        ShockBrand brand = db.ShockBrands.Find(id);
        cost = brand.Cost;
        cost = cost - costp;
        return cost;
    }

因为它们是null我正在命中我的if语句并且在成功中返回零。我阅读的大部分内容都是添加内容类型,但在我的情况下似乎没有帮助,我确定它有点小。

3 个答案:

答案 0 :(得分:1)

从浏览器控制台,这个

$.ajax({
        cache: false,
        type: "get",
        contentType: "application/json; charset=utf-8",
        url: 'http://google.com',
        data: JSON.stringify({ idp: 1, id: 2 }),
        dataType: "json",
        aysnc: false,
        success: function (data1) {
           console.log(data1)

        }
    });

将请求返回到http://google.com/?{%22idp%22:1,%22id%22:2}&_=1440696352799,这是不正确的

并且没有stringify

$.ajax({
        cache: false,
        type: "get",
        contentType: "application/json; charset=utf-8",
        url: 'http://google.com',
        data: { idp: 1, id: 2 },
        dataType: "json",
        aysnc: false,
        success: function (data1) {
           console.log(data1)

        }
    });

返回http://google.com/?idp=1&id=2&_=1440696381239(请参阅网络标签)

所以不要使用JSON.stringify

为什么它会起作用 - 你的asp.net控制器动作接收简单的类型参数(字符串,数字等),jquery相当聪明,以确定将要发送什么,如果它是对象里面的对象它将它作为POST的POST数据发送给GET的对象的字符串表示(你有GET请求,但为了知识的目的,只需坚持可以发送的2种类型的数据, params & data )所以当jquery配置url时,asp.net会理解约定,并将请求与approciated action匹配

但是不要相信我,自己检查一下

chrome dev console是你的朋友

答案 1 :(得分:0)

你可以就像 var dataReq = {idp:previous,id:sel}; data:dataReq

并且无需使用dataType和contentType

答案 2 :(得分:0)

通过删除 contentType:“ application / json; charset = utf-8 和 dataType:“ json” 它为我工作。否则,我总是在控制器操作中得到value = null。 我现在用数据调用ajax的代码是:

links = ['site1', 'site2']

def main(links):
    with requests.Session() as req:
        for link in links:
            r = req.get(link)
            print(r.text)


main(links)
相关问题