使用$ .getJSON(url)从视图中调用控制器操作方法

时间:2014-03-20 22:26:29

标签: c# .net asp.net-mvc

我有一个控制器从视图中接受一个参数,它应该将json数据返回到同一个视图。

关于控制器动作我有

public ActionResult GetDataById(int id)
{
    var data = ...give me data...
    return Json(data, JsonRequestBehavior.AllowGet);
}

在视图上我有

<ul id="#myList">
</ul>

(function () {
   var updateList = function (competitions) {
       $("#myList").html($("listTemplate").render(competitions))
                             .listview();
   };
   $(document).one("pageinit", function () {
        var url = "/Home/GetDataById/1";
        $.getJSON(url)
         .then(updateList);
    });    
} ());

<script id="listTemplate" type="text/x-jsrender">
   <li>
       <a href="{{:Name}}">{{:Id}}
           <span class="ui-li-count">{{:CountedData}}</span>
   </li>    
</script>

在调试时GetDataById根本没有被攻击。当我在调用$ .getJSON之前放置alert(url)时,我得到了正确的url。我在这里做错了什么?

更新: 路线配置

routes.MapRoute(
       name: "Default",
       url: "{controller}/{action}/{id}",
       namespaces: new[] { "MyWebApp.Controllers" },
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

3 个答案:

答案 0 :(得分:1)

如果您将Id指定为参数

,会发生什么
var url = "/Home/GetDataById";

$.getJSON(url, { id: 1 })

答案 1 :(得分:1)

只是一个疯狂的猜测,但你是在本地运行该网站吗?如果是在虚拟目录中(即你是http://localhost/home/index还是http://localhost/mysite/home/index)

你可以试试这个:

var url = @Url.Content( "~/Home/GetDataById/1" );

答案 2 :(得分:1)

我正在使用Quite M. Porta所描述的$ .getJSON,但略有不同。我在URL的末尾添加了一个“/”

$.getJSON("/Home/GetDataById/", { id: 1 }).then(updateList);

如果一切都失败了,你可以试试。