我的* .json文件结构如下:
[{ val1: "a1", val2: "b1", val3: "c1"},{ val1: "a2", val2: "b2", val3: "c2"},{ val1: "a3", val2: "b3", val3: "c3"}]
我必须将该数据传递给View,我有一个接受JSON的数据表。
我创建了Model类:
public class Values {
public string val1 { get; set; }
public string val2 { get; set; }
public string val3 { get; set; }
}
然后在Home Controller中:
public class HomeController : Controller
{
private string jsonString = File.ReadAllText(@"data.json");
[HttpPost]
public JsonResult SaveTempSelectedPlan(string jsonString)
{
List<Values> vals = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<List<Values>>(jsonString);
return Json(vals);
}
}
最后在视野中:
$(document).ready(function () {
$.ajax({
type: 'POST',
url: '@Url.Action("SaveTempSelectedPlan", "Home")',
dataType: 'json',
data: '[{ "val1" : ' + data.val1 + ', "val2" : ' + data.val2 + ', "val3" : ' + data.val3 '}]',
contentType: 'application/json; charset=utf-8',
success: function (data) {
debugger
alert(data);
var returnJson = data;
}
});
});
因此,此代码无法正常工作,控制器操作未被调用,无法使用JSON填充var returnJson
。我应该改变什么?
答案 0 :(得分:0)
你不是发送JSON,但你的jQuery AJAX说它是json。你的控制器期待一个字符串,每个人都很困惑所以要么改变你的控制器动作或改变你的javascript发送文本,你告诉jQuery它是json但你的控制器期待字符串。
因此更改控制器以接受对象并更改您的js以发送json对象:
var dataVar = [{ val1: data.val1, val2: data.val2, val3: data.val3 }];
$.ajax({
type: 'POST',
url: '@Url.Action("SaveTempSelectedPlan", "Home")',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: dataVar,
success: function (data) {
debugger
alert(data);
var returnJson = data;
}
控制器:
[HttpPost]
public JsonResult SaveTempSelectedPlan(Values[] vals)
{
....
}
或保持您的控制器不变并更改您的javascript以发送文本而不是json:
$.ajax({
type: 'POST',
url: '@Url.Action("SaveTempSelectedPlan", "Home")',
data: '[{ "val1" : ' + data.val1 + ', "val2" : ' + data.val2 + ', "val3" : ' + data.val3 '}]',
success: function (data) {
debugger
alert(data);
var returnJson = data;
}