我在获取一个返回JsonResult的控制器方法时遇到问题,该方法接受通过JQuery getJSON方法传递的参数。
当getJSON方法调用的第二个参数(“data”)为null时,我正在处理的代码工作正常。但是当我尝试在那里传递一个值时,似乎控制器方法似乎永远不会被调用。
在这个例子中,我只想使用一个整数。正常工作的getJSON调用如下所示:
$.getJSON(”/News/ListNewsJson/”, null, ListNews_OnReturn);
控制器方法如下:
public JsonResult ListNewsJson(int? id)
{
…
return Json(toReturn);
}
通过在ListNewsJson方法中放置一个断点,我看到当getJSON的data参数为null时调用此方法,但是当我用值替换它时,例如3:
$.getJSON(”/News/ListNewsJson/”, 3, ListNews_OnReturn);
...永远不会遇到控制器方法/断点。知道我做错了吗?
我还应该提一下,如果我通过浏览器手动转到地址(“/ News / ListNewsJson / 3”),控制器方法可以正常工作。
答案 0 :(得分:3)
getJSON需要一组键/值对,而不是裸值,因此您需要使用{id:3}来传递id值。不幸的是,这将变成/ News / ListNewsJson /?id = 3,这不是你想要的。我建议只需将值附加到Url上即可在路径表单中构建它。我也假设这个值实际上来自一个变量,所以我用这种形式写了它。如果它可能为null,那么你需要做一些更复杂的事情来制定Url,这样才有意义。
var id = '3';
$.getJSON(”/News/ListNewsJson/” + id, ListNews_OnReturn);
答案 1 :(得分:1)
我知道这是一个较旧的主题,但你为什么不使用MVC Url.Action()助手呢?这样可以确保您的路线正确。
$.getJSON('<%=Url.Action("ListNewsJson", "News") %>/' + id, ListNews_OnReturn);
当然,如果id值来自ViewData,您可以使用Url.Action()帮助器方法的第3个参数传入具有id属性的匿名类型,MVC将创建所需的URL。否则,如果值来自javascript函数,则在javascript中连接它。
HTH