繁体   English   中英

Ajax 将空值传递给控制器

[英]Ajax passing null value to controller

我有一个下拉列表,其中包含一个 ID 列表。 客户将选择一个,它将在页面上反映总价格。 我正在创建一个 ajax 调用,当从下拉列表中提取不同的 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;
    }

由于它们为空,因此我正在使用 if 语句并在成功中返回零。 我阅读的大部分内容都是添加内容类型,但这对我来说似乎没有帮助,我确定这是小事。

从浏览器控制台,这个

$.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 ,这是不正确的

并且没有字符串化

$.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 种可以发送的数据类型, paramsdata )因此,当 jquery 配置 url 时,asp.net 理解约定,并且匹配请求到适当的动作

但别相信我,你自己检查一下

chrome dev 控制台是你的朋友

你可以把它像

var dataReq={ idp: previous, id: sel };
data: dataReq

并且不需要使用 dataType 和 contentType。

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

 $(function () {
    $.noConflict();
    $.ajax({
        type: "POST",
        url: "../Case/AjaxMethodForUpdate",
        data: {typ: $('#typeID').val()},
        success: OnSuccess,
        failure: function (response) {
            alert(response.d);
        },
        error: function (response) {
            alert(response.d);
        }
    }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM