我想用AJAX发布一个包含一些数据的字符串数组到我的控制器。这只是纯文本,我的控制器始终接收空参数。我知道我不应该字符串化,因为我不使用模型或视图模型。
我搜索了其他问题,但大多数都涉及表格并使用viewmodel属性。
这是我的代码:
控制器
[HttpPost]
public ActionResult FirstAjax(string[] listValues)
{
//TODO
return Json("Reached the controller", JsonRequestBehavior.AllowGet);
}
我添加了JSON返回值,以检查我是否确实在按下控制器,并且在视图中收到了消息。
AJAX POST
var listValues = [];
listElements.each(function (index, element) {
listValues.push(element.innerText);
});
var serviceURL = '/Products/FirstAjax';
$.ajax({
type: "POST",
url: serviceURL,
data: listValues,
success: successFunc,
error: errorFunc
});
function successFunc(data, status) {
alert(data);
}
function errorFunc() {
alert('error');
}
由于我的列表可通过拖放进行排序,因此在单击按钮时,listValues
的文本值将按<li>
项的顺序填充。
查看
<div class="demo">
<ul id="sortable">
<li class="ui-state-default">Cat</li>
<li class="ui-state-default">Dog</li>
<li class="ui-state-default">Tiger</li>
</ul>
<button type="button" onclick="display_array();">Ajax Post!</button>
</div><!-- End demo -->
答案 0 :(得分:0)
将ajax选项更改为:
$.ajax({
...
data: {listValues: listValues},
...
});
原因是:服务器期望发布的对象/查询字符串与参数命名相同。 data
会在查询字符串中转换为listValues=...&otherParams=...
。如果您在未指定参数名称的情况下发布数组,则JQuery无法正确映射它们
答案 1 :(得分:0)
编写您的Ajax POST方法,如下所示:
$(document).ready(function(){
var listValues = [];
listElements.each(function (index, element) {
listValues.push(element.innerText);
});
var serviceURL = '/Products/FirstAjax';
$.ajax({
type: "POST",
url: serviceURL,
data: {listValues: listValues},
contentType: 'application/json'
success: successFunc,
error: errorFunc
});
function successFunc(data, status) {
alert(data);
}
function errorFunc() {
alert('error');
}
});
希望这可以解决您的问题。
答案 2 :(得分:0)
您需要将contentType
作为application/json
,并使用JSON.stringify
将JavaScript对象转换为JSON字符串。
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: serviceURL,
data: JSON.stringify({ listValues: listValues}),
success: successFunc,
error: errorFunc
});