2017-03-03 138 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 
}; 
相关问题