2017-03-03 45 views
0

我知道這個調用有效,因爲我可以在調試時在xhr頭文件中看到它。然而,數據似乎從來沒有擊中控制器,我不知道爲什麼。我的ASP.Net技能相當有限,所以我會發布我所做的一切。AJAX Post永遠不會讓它到ASP.Net控制器

JS:

var data = JSON.stringify(myObj) 
$.ajax({ 
    url: '/Things/UploadInfo', 
    type: 'POST', 
    data: data, 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    crossDomain: true, 
    cache: false, 
    processData: false, 
    success: function (data) { 
     console.log('success') 
    }, 
    error: function() { 
     console.log('error') 
    } 
}); 

ThingsController.cs

字符串數據保持返回null

[System.Web.Http.HttpPost] 
public JsonResult UploadInfo(string data) 
{ 
    InfoModel someInfo = new InfoModel(); 

    return Json(new { status = "success" }); 
} 

InfoModel.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace ProjectName.Models 
{ 
    public class InfoModel 
    { 
     public class Attr 
     { 
      public string name { get; set; } 
      public string age { get; set; } 
      public string sex { get; set; } 
     } 
    } 
} 
+1

「內容」是(使用默認的模板時),一個文件夾,您的圖片,CSS等等。你是否重命名該文件夾?如果不是,它通常不會被路由引擎映射。 –

+0

@ TiesonT.updated – itsclarke

+0

那個ajax叫什麼?你在視圖中使用腳本標記嗎? –

回答

0

有幾件事情:

  1. 爲了您的AJAX網址,使用 「http://localhost:portNumber/Things/UploadInfo

  2. 更改您的UploadInfo參數(InfoModel數據)。

  3. 使用像Chrome擴展高級休息客戶端這樣的工具程序,並確保您可以在您的方法中找到斷點。 https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo?hl=en-US

+0

感謝您的信息。我改變了我的ajax url和參數信息,但是我得到了相同的結果。 ARC也提供200 OK狀態。 – itsclarke

+0

使用ARC進行測試時,您可以在您的方法中設置斷點嗎?當/如果它闖入你的方法,參數數據是否爲空?空的? – TrevorBrooks

1

我會從簡化ajax調用開始。您正在使用的設置對於WebForms是必需的,但MVC和WebApi框架不需要這些額外的選項(除crossDomain之外,但看起來您實際上並沒有做與CORS相關的任何操作)。

這是我會用什麼:

$.post('/Things/UploadInfo', myObj) 
    .done(function (response, status, jqxhr) { 
     console.log('success') 
    }) 
    .fail(function(jqxhr, status, error) { 
     console.log('error') 
    }); 

這假定myObj或者是一個JSON對象,也可以是隱式序列化。

您的UploadInfo操作應該可能有要綁定的模型或您期望的單個參數。比方說,你有這種模式:

public class Foo 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

那麼你的行動看起來像

public ActionResult UploadInfo(Foo model) 

public ActionResult UploadInfo(int id, string name) 

兩者都用模型綁定映射。作爲附註,您可以保留返回類型(主要是)通用 - JsonResult繼承ActionResult,因此當返回類型爲ActionResult時,仍然可以使用return Json()

如果你希望改變JSON對象,然後將數據對象,你提供給Ajax調用會是這樣的:

var data = { 
    data: myObj 
}; 
相關問題