使用$. getjson (url)从视图调用控制器动作方法

本文关键字:控制器 调用 方法 视图 getjson url 使用 | 更新日期: 2023-09-27 17:51:07

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

在控制器动作上,我有

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

On the view I have

<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根本没有命中。当我在调用$。我得到了正确的url。我哪里做错了?

更新:路由配置

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

使用$. getjson (url)从视图调用控制器动作方法

如果指定Id作为参数会发生什么

var url = "/Home/GetDataById";
$.getJSON(url, { id: 1 })

只是一个大胆的猜测,但是您是在本地运行站点吗?如果是,它是否在虚拟目录中(例如,您要去http://localhost/home/index还是http://localhost/mysite/home/index) ?

你可以试试:

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

我使用$。getJSON和Quite M. Porta’s描述的一样,但有一点不同。我在URL后面加了一个'/'

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

如果这些都失败了,你可以试试。