使用 jQuery Ajax 将单个对象传递给 MVC 控制器方法

Posted

技术标签:

【中文标题】使用 jQuery Ajax 将单个对象传递给 MVC 控制器方法【英文标题】:Passing A Single Objects Into An MVC Controller Method Using jQuery Ajax 【发布时间】:2019-02-16 20:55:53 【问题描述】:

我正在尝试使用 JQuery 将单个对象数据发布到 MVC 控制器,以下是我的代码。

 //declare of type Object of GroupData
    var GroupData = ;
    //pass each data into the object 
    GroupData.groupName = $('#groupName').val(); 
    GroupData.narration = $('#narration').val();
    GroupData.investmentCode = $('#investmentCode').val();
    GroupData.isNew = isNewItem;
    //send to server
        $.ajax(
            url: "/Admin/SaveContributionInvestGroup",
            type: "POST",
            contentType: "application/json;charset=utf-8",
            dataType: "json", 
            data: JSON.stringify( GroupData: JSON.stringify(GroupData) ),

            success: function (res) 
                alertSuccess("Success", res.Message);

                //hide modal
                $('#product-options').modal('hide');

                hide_waiting();
            ,
            error: function (res) 
                alertError("Error", res.Message);
            
        );

下面是我的控制器。

[HttpPost]
    public JsonResult SaveContributionInvestGroup(ContributionInvestmentGroup GroupData)
    
        ClsResponse response = new ClsResponse();
        ClsContributionInvestmentGroup clsClsContributionInvestmentGroup = new ClsContributionInvestmentGroup();

        var userID = (int)Session["userID"];
        var sessionID = (Session["sessionID"]).ToString();

        if (contributionGroupData != null)
        
            //get the data from the cient that was passed
            ContributionInvestmentGroup objData = new ContributionInvestmentGroup()
            
                contributionInvestmentGroupID = 0,
                groupName = GroupData.groupName,
                narration = GroupData.narration,
                investmentCode = GroupData.investmentCode,
                isNew = GroupData.isNew
            ;

            response = clsClsContributionInvestmentGroup.initiateNewContributionInvestmentGroup(sessionID, objData);
        
        else
        
            response.IsException = true;
            response.IsSucess = false;
            response.Message = "A system exception occurred kindly contact your Administrator.";
        


        return Json(new
        
            response.IsSucess,
            response.Message
        );
    

问题是,数据没有被发送到控制器,控制器接收到一个空对象。 请协助,非常感谢您的努力,谢谢。

【问题讨论】:

您发送的是GroupData,但参数是contributionGroupData。根据您的 C# 类的外观,您也可能不需要该外部结构。 @RoryMcCrossan 我已将它设置为contributionGroupData,但它仍然不起作用...... 它只是 data: GroupData, 并删除 contentType 选项 如果你生成了你正确的视图,那么你只需要var GroupData = $(yourForm).serialize(); 如果您确实使用了contentType: 'application/json(这是不必要的),那么它将是data: JSON.stringify( GroupData: GroupData ),data: JSON.stringify(GroupData); 【参考方案1】:

试试这样:

//send to server
        $.ajax(
             type: "POST",
                url: "/Admin/SaveContributionInvestGroup",
                dataType: "json",
                data:  GroupData,
            success: function (res) 
                alertSuccess("Success", res.Message);

                //hide modal
                $('#product-options').modal('hide');

                hide_waiting();
            ,
            error: function (res) 
                alertError("Error", res.Message);
            
        );

【讨论】:

旁注 - content: "application/json;", 无效 - 它的 contentType - 但幸运的是你有这个错字,因为如果你使用 contentType 它将不起作用 @StephenMuecke 否。我测试过,不适用于contentType 是的,我知道 - 这正是我所说的 - 但是你的代码中有 content: "application/json;",(幸运的是它是无效的并且被忽略了 - 没有名为 content 的 ajax 选项)【参考方案2】:

在您的控制器中,您没有 custom binding 将 JSON 绑定到您的模型,这就是您在参数中获得 null 的原因。 而是将其发布为查询,尝试简单地更改您的 ajax 选项,如下所示:


        ...
        contentType: "application/x-www-form-urlencoded", //default: 
        ..., 
        data: $.param(GroupData),

        ...

也许属性名称区分大小写,因此您需要更改 javascript 模型的名称

【讨论】:

$.param 不是必需的(DefaultModelBinder 不区分大小写)

以上是关于使用 jQuery Ajax 将单个对象传递给 MVC 控制器方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery Ajax 将参数传递给 WebMethod

如何将对象上下文传递给 jQuery.ajax JSONP 回调?

如何使用 jquery ajax 正确地将 json 对象传递给烧瓶服务器

如何从 jQuery ajax 调用将复杂对象传递给 ASP.NET WebApi GET?

DataTables 警告:表 id=users - Ajax 错误。使用 jquery 将参数传递给它时

如何将附加参数传递给 jQuery DataTable ajax 调用?