使用 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?