English 中文(简体)
ASP.Net MVC Json 结果:向控制器方法传递的参数问题
原标题:
  • 时间:2009-03-18 19:54:47
  •  标签:

我遇到了一个问题,无法让一个返回JsonResult的控制器方法接受通过JQuery getJSON方法传递的参数。

当getJSON方法调用的第二个参数(“data”)为空时,我正在处理的代码可以正常工作。但是当我尝试在那里传递一个值时,似乎控制器方法甚至都没有被调用。

在这个示例案例中,我只想使用一个整数。成功的getJSON调用看起来像这样:

$.getJSON(”/News/ListNewsJson/”, null, ListNews_OnReturn);

控制器方法如下所示:

public JsonResult ListNewsJson(int? id)
{
    …
    return Json(toReturn);
}

通过在ListNewsJson方法中放置断点,我发现当getJSON的数据参数为空时,该方法被调用,但当我用值替换它,比如说3时:

$.getJSON(”/News/ListNewsJson/”, 3, ListNews_OnReturn);

控制器方法/断点从未被触发。有任何想法我做错了什么吗?

我还应该提到,如果我手动在浏览器中输入地址(“/News/ListNewsJson/3”),控制器方法也可以正常工作。

最佳回答

getJSON期望一组键/值对,而不是一个单独的值,所以您需要使用{id: 3}来传递一个id值。不幸的是,这会变成/News/ListNewsJson/?id=3,这不是您想要的。我建议只需将值附加到URL上,以构建路由形式。我还假设该值实际上来自一个变量,因此我已经以那种形式编写了它。如果可能为null,则需要做一些更复杂的事情来格式化URL,以使其合理。

var id =  3 ;
$.getJSON(”/News/ListNewsJson/” + id, ListNews_OnReturn);
问题回答

我知道这是一个较旧的主题,但为什么你不使用MVC Url.Action()助手呢?这将确保您的路由是正确的。

$.getJSON( <%=Url.Action("ListNewsJson", "News") %>/  + id, ListNews_OnReturn);

当然,如果id值来自ViewData,您可以使用Url.Action()帮助方法的第三个参数来传递具有id属性的匿名类型,MVC将创建所需的URL。否则,如果值来自JavaScript函数,则在JavaScript中串联它。

HTH的中文翻译为:希望有所帮助。





相关问题
热门标签