我尝试过其他人的许多不同的解决方案,但两者都没有运气,我似乎无法调试javascript。
这些是一些变量,因此您可以看到类型。所有变量都包含数据
我的观点如下:
var startTime = new Date();
var images = @Html.Raw(Json.Encode(ViewBag.Images));
var sound = @Html.Raw(Json.Encode(ViewBag.Tones));
var gamePlayed = @Html.Raw(Json.Encode(ViewBag.GamePlayedId));
function SaveGameData()
{
$.ajax({
type: 'POST',
url: '@Url.Action("Play", "Game")',
dataType: 'json',
contentType: "application/json; charset=utf-8",
data: {
GamePlayedId: gamePlayed,
Level: level,
ExpectedImageName: expectedImageArray,
ExpectedToneName: expectedToneArray,
SelectedImageName: selectedImageArray,
SelectedToneName:selectedToneArray,
StartTime: startTimeArray,
EndTime: endTimeArray
},
success: function () {
alert('suc');
},
error: function (args) {
alert('error');
}
});
}
我的控制器如下:
[Authorize]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Play(SaveGameViewModel model)
{
// Do something
return Json(new { success = true , message ="successful"});
}
我的观看模型如下:
public class SaveGameViewModel
{
public int GamePlayedId { get; set; }
public int Level { get; set; }
public List<string> ExpectedImageName { get; set; }
public List<string> ExpectedToneName { get; set; }
public List<string> SelectedImageName { get; set; }
public List<string> SelectedToneName { get; set; }
public List<DateTime> StartTime { get; set; }
public List<DateTime?> EndTime { get; set; }
}
我一直收到来自ajax警报的错误消息。我尝试过很多不同的东西,似乎没什么用。我感谢您提供的任何帮助。非常感谢!
答案 0 :(得分:2)
您所显示的代码至少有2个问题。
首先,您的方法标有[ValidateAntiForgeryToken]
属性,但您没有传递令牌,因此永远不会运行该方法。删除该属性,或使用该属性(假设您的表单包含@Html.AntiForgeryToken()
)
data: {
__RequestVerificationToken: $('[name=__RequestVerificationToken]').val(),
.... // your other properties
},
其次,您发布了一个javascript对象,因此您需要删除contentType: "application/json; charset=utf-8",
选项(或者您需要使用JSON.stringify()
字符串化数据
旁注:您不清楚为什么要手动构建要发送到控制器的对象。如果您的表单控件基于SaveGameViewModel
并且使用强类型的html帮助程序正确生成,那么您可以使用
$.ajax({
data: $('form').serialize(),
....
});