Mvc Jquery Ajax Post 返回 null

Posted

技术标签:

【中文标题】Mvc Jquery Ajax Post 返回 null【英文标题】:Mvc Jquery Ajax Post returns null 【发布时间】:2015-11-27 22:59:42 【问题描述】:

我一直在尝试发布两个参数... 这是ajax代码

function Kaydet() 
        var params = ;
        var Kiralayan = $("#RentForm").serialize();            
        params.kisi = Kiralayan ;
        params.aracid = P.AracID;           
        console.log(params);

        $.ajax(
            type: "POST",
            url: '@Url.Action("Save","AracKirala")',
            data: params,
            dataType: "text",
            success: function (response) 
                if (response != "OK") 
                    alert("Kayıt yapılamadı.");
                
                else 
                    document.getElementById("RentForm").reset();
                    alert("Kayıt başarıyla gerçekleştirildi.");
                    $("#myModal").modal('hide');
                    Ara();
                

            
        );

方法

public ActionResult Save(Kiralayan kisi = null, int aracid = 0)
    

问题是 ajax 正确地发布“aracid”,但在触发该方法时“kisi”变为空...... 我尝试不使用“kisi”发布“aracid”,因此 ajax 可以很好地为一个参数“kisi”发布,但不能一起使用......

【问题讨论】:

将整个表单序列化为一个变量似乎很奇怪。您是否在控制台的网络选项卡中查看了 Ajax 请求中发送的内容? 您选择两个几乎相同的答案,而只选择评论另一个有什么特别的原因吗? 【参考方案1】:

如果您对表单进行序列化,则可以使用.param() 函数向其添加其他值

var data = $("#RentForm").serialize() + '&' + $.param( 'aracid': AracID , true);

$.ajax(
    type: "POST",
    url: '@Url.Action("Save","AracKirala")',
    data: data,
    ....

【讨论】:

他不应该也换个控制器吗?我的意思是在模型中添加aracid 属性? 没有。 $("#RentForm").serialize() 本身将绑定到 Kiralayan kisi,这只是将 ..&aracid=someValue 添加到表单数据中,因此它将绑定到附加参数 那你能告诉我如果 ViewModel 有aracid 属性和控制器有相同的额外参数aracid 会发生什么吗? 嗯,我从来没有测试过 :),但我猜只有一个会被绑定(DefaultModelBinder 会忽略随后的具有相同名称的 name/value 对,除非属性是 IEnumerable ) 但我不确定。明天要测试的东西。我会告诉你的。 @teo van kot:如果名称出现在模型和参数中,它将映射到模型属性和额外参数。我自己的答案已更新以包含这个小事实。【参考方案2】:

MVC 会为您映射对象,因此您不妨跳过对象内表单的提取嵌套。

注意事项:

如果aracid也是模型中的一个属性,它将映射到both属性额外参数。 在 serialise() 集合上使用 push 比在 serialize() 调用之前连接字符串的替代方法更易于维护。

例如

 var Kiralayan = $("#RentForm").serialize();            
 // Add the extra non-form parameter
 Kiralayan.push(name: 'aracid', value: P.AracID);

完整示例:

    function Kaydet() 
        var Kiralayan = $("#RentForm").serialize();            
        // Add the extra non-form parameter
        Kiralayan.push(name: 'aracid', value: P.AracID);         
        console.log(params);

        $.ajax(
            type: "POST",
            url: '@Url.Action("Save","AracKirala")',
            data: Kiralayan,
            dataType: "text",
            success: function (response) 
                if (response != "OK") 
                    alert("Kayıt yapılamadı.");
                
                else 
                    document.getElementById("RentForm").reset();
                    alert("Kayıt başarıyla gerçekleştirildi.");
                    $("#myModal").modal('hide');
                    Ara();
                

            
        );

【讨论】:

以上是关于Mvc Jquery Ajax Post 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

mvc中的ajax jquery-方法返回不是布尔类型的True [重复]

Jquery Ajax,从 mvc.net 控制器返回成功/错误

从 ASP.NET MVC 返回 null 时,jQuery post JSON 失败

MVC中使用jquery的浏览器缓存问题

c# mvc ajax 提交与 接收参数

jquery Ajax 调用 - 数据参数未传递给 MVC 控制器操作