ASP.Net MVC Json结果:传递给控制器​​方法问题的参数

时间:2009-03-18 19:54:48

标签: asp.net jquery asp.net-mvc json

我在获取一个返回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”),控制器方法可以正常工作。

2 个答案:

答案 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