簡體   English   中英

MVC 5 Ajax請求-未調用控制器操作

[英]MVC 5 Ajax request - controller action is not being called

我有* .json文件,其結構如下:

[{ val1: "a1", val2: "b1", val3: "c1"},{ val1: "a2", val2: "b2", val3: "c2"},{ val1: "a3", val2: "b3", val3: "c3"}]

我必須將該數據傳遞到視圖,在該視圖中我有一個接受JSON的數據表。

我創建了Model類:

public class Values {
    public string val1 { get; set; }
    public string val2 { get; set; }
    public string val3 { get; set; }
}

然后在家庭控制器中:

 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 我應該改變什么?

您沒有發送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;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM