C# 无法将参数作为JSON传递给mvc控制器
我试图将具有四个属性的C# 无法将参数作为JSON传递给mvc控制器,c#,asp.net-mvc,C#,Asp.net Mvc,我试图将具有四个属性的id和对象传递给动作控制器,但不幸的是,它没有通过,我得到以下错误 参数字典包含方法“System.Web.Mvc.JsonResult GetItems(Int32,Ebiquity.Reputation.Neptune.Web.Models.MyWorkFilterModel)”在“Ebiquity.Reputation.Neptune.Web.Controllers.MyWorkController”中的非空类型“System.Int32”参数“batchID”的空条
id
和对象
传递给动作控制器,但不幸的是,它没有通过,我得到以下错误
参数字典包含方法“System.Web.Mvc.JsonResult GetItems(Int32,Ebiquity.Reputation.Neptune.Web.Models.MyWorkFilterModel)”在“Ebiquity.Reputation.Neptune.Web.Controllers.MyWorkController”中的非空类型“System.Int32”参数“batchID”的空条目。可选参数必须是引用类型、可为null的类型或声明为可选参数
参数名称:参数
正在传递的JSON是:
{
"batchID": 21610,
"filter":
{
"issueNo": "1",
"messageNo": "2",
"itemDate": "Wed, 05 Feb 2014 00:00:00 GMT",
"mediaName":"3"
}
};
ajax调用:
self.GetItems = function (batchID, issueNo, messageNo, itemDate, mediaName) {
var filter = {
issueNo: issueNo,
messageNo: messageNo,
itemDate: itemDate,
mediaName: mediaName
};
$.ajax({
type: "GET",
url: "/MyWork/GetItems",
data: JSON.stringify({
batchID: batchID,
filter: filter
}),
dataType: "json",
success: function (result) {
self.Items([]);
if (result.Items != null) {
var tempItems = ko.mapping.fromJS(result.Items, mappingOptions);
self.Items.push.apply(self.Items, tempItems());
}
}
});
};
控制员:
[HttpGet]
public JsonResult GetItems(int batchID, MyWorkFilterModel filter)
{
using (var rep = new WorkRepository(CurrentUser))
{
return Json(rep.GetBatch(batchID, filter), JsonRequestBehavior.AllowGet);
}
}
过滤器模型:
public class MyWorkFilterModel
{
public int? IssueNo { get; set; }
public int? MessageNo { get; set; }
public string MediaName { get; set; }
public DateTime? ItemDate { get; set; }
}
您必须将AJAX调用的类型更改为POST而不是GET。数据参数不会随GET请求一起发送。您必须将AJAX调用的类型更改为POST而不是GET。数据参数不会随GET请求一起发送。我们这里有很多这样的讨论(参见下面的链接) 尝试以下Ajax数据类型:
self.GetItems = function (batchID, issueNo, messageNo, itemDate, mediaName) {
var filter = {
issueNo: issueNo,
messageNo: messageNo,
itemDate: itemDate,
mediaName: mediaName
};
$.ajax({
type: "POST",
url: "/MyWork/GetItems",
dataType: 'text',
data: "param=" + JSON.stringify({
batchID: batchID,
filter: filter
}),
success: function (result) {
self.Items([]);
if (result.Items != null) {
var tempItems = ko.mapping.fromJS(result.Items, mappingOptions);
self.Items.push.apply(self.Items, tempItems());
}
}
});
};
控制器
[HttpPost]
public JsonResult GetItems(String Param)
{
}
我们这里有很多这样的讨论(参见下面的链接) 尝试以下Ajax数据类型:
self.GetItems = function (batchID, issueNo, messageNo, itemDate, mediaName) {
var filter = {
issueNo: issueNo,
messageNo: messageNo,
itemDate: itemDate,
mediaName: mediaName
};
$.ajax({
type: "POST",
url: "/MyWork/GetItems",
dataType: 'text',
data: "param=" + JSON.stringify({
batchID: batchID,
filter: filter
}),
success: function (result) {
self.Items([]);
if (result.Items != null) {
var tempItems = ko.mapping.fromJS(result.Items, mappingOptions);
self.Items.push.apply(self.Items, tempItems());
}
}
});
};
控制器
[HttpPost]
public JsonResult GetItems(String Param)
{
}
您可以尝试将IssueNo和MessageNo设置为整数而不是字符串。并使用
POST
而不是GET
如果必须使用GET,则可以仅作为url的一部分传递参数 您可以尝试将IssueNo和MessageNo设置为整数而不是字符串。并使用
POST
而不是GET
如果必须使用GET,则可以仅作为url的一部分传递参数 正如Semao所提到的,如果你想要那种JSON,你需要使用POST。既然你以这种方式发布JSON,我想你只是有一个打字错误,打算使用POST 如果您真的想要获取,您需要在URL中传递值 在您的情况下,您需要添加:
[FromUri]
在对象之前
例如:
public class QueryObj
{
public int Id { get; set; }
public string Name { get; set; }
}
public Result Get([FromUri] QueryObj queryObj)
{...}
http://.../query?Id=1&Name=test
正如Semao所提到的,如果您想要这种JSON,您需要使用POST。既然你以这种方式发布JSON,我想你只是有一个打字错误,打算使用POST 如果您真的想要获取,您需要在URL中传递值 在您的情况下,您需要添加:
[FromUri]
在对象之前
例如:
public class QueryObj
{
public int Id { get; set; }
public string Name { get; set; }
}
public Result Get([FromUri] QueryObj queryObj)
{...}
http://.../query?Id=1&Name=test
我缺少ajax调用的contenttype属性,我没有使用GET,而是使用了POST,它成功了
$.ajax({
type: "POST",
url: "/MyWork/GetItems",
data: JSON.stringify({
batchID: batchID,
filter: filter
}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result) {
}
});
我缺少ajax调用的contenttype属性,我没有使用GET,而是使用了POST,它成功了
$.ajax({
type: "POST",
url: "/MyWork/GetItems",
data: JSON.stringify({
batchID: batchID,
filter: filter
}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result) {
}
});
看起来您的
batchID
为空。在javascript中将其设置为0
,或者在操作中将其设置为null
[HttpGet]
public JsonResult GetItems(int? batchID, MyWorkFilterModel filter)
{
}
看起来您的
batchID
为空。在javascript中将其设置为0
,或者在操作中将其设置为null
[HttpGet]
public JsonResult GetItems(int? batchID, MyWorkFilterModel filter)
{
}
batchID是强制性的,它不为null,如果它未通过null检查,它将不会传递给控制器。batchID是强制性的,它不为null,如果它未通过null检查,它将不会传递给控制器。