MVC 5 Ajax请求 - 未调用控制器操作

时间:2014-06-12 19:21:54

标签: c# model-view-controller asp.net-ajax

我的* .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。我应该改变什么?

1 个答案:

答案 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;
        }