使用JSON向MVC控制器发送数据

3
我正在使用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",一切似乎都没问题。


尝试查看浏览器的网络选项卡,以查看请求发送了什么,并尝试将参数更改为非空十进制数(虽然我认为这并不重要)。 - Jason P
在网络选项卡上,一切似乎都很好,实际上我给你的代码现在正在工作,显然我关注了我的代码中错误的部分。非常感谢您如此快速的回答,对于我那么晚的回复感到抱歉。 - huxyz
4个回答

1

在Stack Overflow上可以找到很多与此问题相关的材料。从this answer中获取,尝试将以下内容更改为:

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

更改为:

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

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*/

});

我每天都这样做,对于可空类型和非可空类型都有效...

我非常高兴你提供了详细的答案。你说得对,我的代码没有问题,现在它可以工作了。实际上,我不知道问题的真正原因是什么。 - huxyz

0
你只需要这样做就可以了:
data: { fUserId: idno }

0

我的代码没有做任何修改,但现在它却可以工作了。我认为可能是其他问题影响了数据传递。我通常会对代码进行多次更改,现在实际上我不知道问题到底出在哪里。也许解决方案只是重新启动我的Web应用程序并清除Web浏览器中的所有缓存和Cookie。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接