使用JSON将数据发送到MVC控制器

时间:2013-12-10 14:12:04

标签: jquery ajax asp.net-mvc json

我正在使用JQuery Ajax对ASP.NET MVC控制器进行简单调用。这是我的代码

   function postdata(idno) {
   console.log(idno);

   $.ajax({
        type: 'POST',
        url: "/IM/GetMessages",
        contentType: 'application/json',
        dataType: 'json',            
        data: JSON.stringify({ 'fUserId': idno }), 
        success: function (data) { /*CODE*/

    });}

控制器看起来像这样

     [HttpPost]
     public ActionResult GetMessages(decimal? fUserId)
     {
        var list = WebUtility.IMMessages.Where(p =>
            (p.ToUserId == Session.UserId  && (!fUserId.HasValue || fUserId.HasValue && p.User == fUserId.Value)))
            .OrderBy(p => p.CreatedDateTime)
            .Select(p => new { MessageId = p.RecordId, MessageBody = p.Description1 });

        return Json(list, JsonRequestBehavior.AllowGet);
     }

问题是我的数据没有传递给我的控制器,而是“null”传递。我该如何纠正这个问题?我在控制台上看“idno”,一切似乎都没问题。

4 个答案:

答案 0 :(得分:1)

快速搜索在Stack Overflow上发现了很多与此问题相关的资料。从this answer拉出,尝试更改此内容:

data: JSON.stringify({ 'fUserId': idno }),

到此:

data: "fUserId=" + JSON.stringify(idno),

答案 1 :(得分:1)

如果你问我,没有理由将单个参数转换为JSON。相反,只需这样做:

$.ajax({
    type: 'POST',
    url: "/IM/GetMessages?fUserId=" + idno,
    dataType: 'json',            
    success: function (data) { /*CODE*/
});

这样您仍然可以返回JSON,但是您传递了单个参数值。现在,如果你真的需要发送一个对象,我认为你的代码没有任何问题。您可能想要声明一个javascript变量并将其转换为json对象,如下所示:

var myVar = { fUserId: idno };

然后在你的ajax请求中使用它:

$.ajax({
    type: 'POST',
    url: "/IM/GetMessages",
    contentType: 'application/json',
    dataType: 'json',            
    data: JSON.stringify(myVar), 
    success: function (data) { /*CODE*/

});

我每天都这样做,对于我来说,它都可以使用可空和非可空类型......

答案 2 :(得分:0)

你应该能够做到这一点:

data: { fUserId: idno }

答案 3 :(得分:0)

没有改变我的代码,但现在正在运作。我认为还有另一个影响传递数据的问题。我在代码中改变了很多东西,现在实际上我不知道究竟是什么问题。也许解决方案只是重新启动我的Web应用程序并清除Web浏览器中的所有缓存和cookie。