我将一个字符串集合的Javascript数组传递给我的apicontroller上的post动作,有一个数据正在发送(我知道这是通过fiddler)但它似乎没有真正得到控制器动作当我我正在调试代码。我的代码如下,任何帮助将不胜感激。
编辑:只是为了澄清一下,调用控制器操作,但是当列表传递给它时,List stuffsId的计数为零
的Ajax /使用Javascript
my.sendStuffToController = function (stuffIds, completedHandler) {
$.ajax({
dataType: 'json',
type: 'POST',
url: my.stuffUrl,
data: {
stuffIds: stuffIds
},
success: function (data) {
if (completedHandler !== undefined) {
completedHandler(stuffIds);
}
}
});
};
My ApiController Post Action
// Post
public void PostAsync(List<string> stuffIds)
{
var clientProxy = this.proxyFactory.CreateClientProxy(Tokens.EndPoint);
var clientChannel = clientProxy.GetClientChannel();
try
{
clientChannel.DoStuffAsync(stuffIds);
}
finally
{
clientProxy.TryCloseAbortClientChannel();
}
}
答案 0 :(得分:1)
dataType
用于指定请求的返回类型。 contentType
是您应该用来告诉服务器您要发送的内容。
答案 1 :(得分:0)
将数组作为jQuery的post参数传递的可能(也是最常见)问题之一被描述为here。
简短版本:
添加
jQuery.ajaxSettings.traditional = true;
在你的jQuery ajax()函数调用之前,即
jQuery.ajaxSettings.traditional = true;
my.sendStuffToController = function (stuffIds, completedHandler) {
$.ajax({
dataType: 'json',
type: 'POST',
url: my.stuffUrl,
data: {
stuffIds: stuffIds
},
success: function (data) {
if (completedHandler !== undefined) {
completedHandler(stuffIds);
}
}
});
};
长版:
从某些时候开始,如果变量是数组,jQuery开始将方括号附加到变量名,即在你的情况下,它将通过ajax调用传输'stuffIds []:value1 stuffIds []:value2'等。 ASP.NET MVC不喜欢这样,并拒绝接受这样的参数。 jQuery.ajaxSettings.traditional = true
关闭此jQuery'功能'。