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