我将我的列表传递给mvc控制器,但是我在控制器中获取空值。但是当我在客户端显示警告时,我的列表中有值。
ajax call
$("#addTiles").click(function() {
userTiles = JSON.stringify({
'userTiles': userTiles
});
alert("Entered function.");
alert(userTiles[0].TileID);
var url = '@Url.Action("AddTiles")';
$.ajax({
type: "GET",
url: url,
data: userTiles,
success: function(d) {
if (d.indexOf('"IsSessionExpired":true') != -1) {
location.reload();
} else {
onAddTilesSuccessful(d);
}
},
error: function() {
errorInOperation();
},
contentType: "application/html; charset=utf-8",
dataType: 'html'
});
});
function onAddTilesSuccessful(e) {
$("#tilesSubmissionMsg").append(e);
}
function errorInOperation(d) {
$("#tilesSubmissionMsg").append("Something went wrong");
}
mvc控制器
public ActionResult AddTiles(List<UserTilesVM> userTiles)
{
return View();
}
列表模型
public class UserTilesVM
{
public int TileID { get; set; }
public int TopPosition { get; set; }
public int LeftPosition { get; set; }
}
在javascript中列出
"{"userTiles":[{"TileID":"3","TopPosition":0,"LeftPosition":0}]}"
我也尝试过用stringfy发送我的列表,但这也没有用。
答案 0 :(得分:5)
您的AJAX设置中有两次contentType和dataType,具有不同的值,这将打破AJAX调用。
请记住,contentType是告诉服务器期望的数据类型,dataType用于确定从documentation返回的数据类型。
编辑:我看到你编辑了代码!
在这种情况下,由于您使用JSON.Stringify来修改要发送的数据,因此您将使用contentType: "application/json; charset=utf-8",
作为contentType,因为您要将JSON数据发送到后端。
答案 1 :(得分:5)
在方法[HttpGet]
上使用AddTiles
,因为您在Ajax匹配时使用了type: "GET"
。
[HttpGet]
public ActionResult AddTiles(List<UserTilesVM> userTiles)
{
return View();
}
如果仍然无法正常工作,请尝试使用type: "POST"
关于Ajax点击和方法使用[HttpPost]
[HttpPost]
public ActionResult AddTiles(List<UserTilesVM> userTiles)
{
return View();
}
答案 2 :(得分:2)
当我们尝试使用ajax传递对象数据时,我们必须将数据存储在变量中并使用&#34;数据直接传递数据:&#39;变量&#39;&#34;在AJAX到控制器方法
#if __IPHONE_OS_VERSION_SOFT_MAX_REQUIRED < __IPHONE_8_4
#undef __AVAILABILITY_INTERNAL__IPHONE_8_4
#define __AVAILABILITY_INTERNAL__IPHONE_8_4 __NBU_AVAILABILITY_STARTING("8.4")
#define __NBU_APICHECK_8_4(_ios) __NBU_AVAILABILITY_STARTING("8.4")
#else
#define __NBU_APICHECK_8_4(_ios) CF_AVAILABLE_IOS(_ios)
#endif
//使用[HttpPost]关键字获取AJAX传递的值。
$("#addTiles").click(function() {
var userTiles = ({
'userTiles': userTiles
});
alert("Entered function.");
alert(userTiles[0].TileID);
var url = '@Url.Action("AddTiles")';
$.ajax({
type: "POST",
url: url,
data: userTiles,
success: function(d) {
if (d.indexOf('"IsSessionExpired":true') != -1) {
location.reload();
} else {
onAddTilesSuccessful(d);
}
},
error: function() {
errorInOperation();
},
contentType: "application/html; charset=utf-8",
dataType: 'html'
});
});
function onAddTilesSuccessful(e) {
$("#tilesSubmissionMsg").append(e);
}
function errorInOperation(d) {
$("#tilesSubmissionMsg").append("Something went wrong");
}
答案 3 :(得分:1)
我认为你的清单定义不合适:
"{"userTiles":[{"TileID":"3","TopPosition":0,"LeftPosition":0}]}"
应该是:
"{"userTiles":[{"TileID":"3","TopPosition":"0","LeftPosition":"0"}]}"
答案 4 :(得分:1)
我使用的这个序列工作正常
你已经检查了 contentType:&#34; application / json&#34;, dataType:&#34; json&#34;, ajax方法中的序列