使用jQuery AJAX的ASP.Net MVC路由问题

我的页面是domain.com/home/details/1

在我的jQuery AJAX调用中,我有以下内容,但当它调用它调用domain.com/home/details/home/getdata时

我该怎么做才能让它得到妥善解决?

$(document).ready(function () { oTable = $('#example').dataTable({ "bServerSide": true, "sAjaxSource": "Home/GetData/", "bProcessing": true, "bPaginate": true, "sPaginationType": "full_numbers", "bFilter": true, "bAutoWidth": false, "fnServerData": function (sSource, aoData, fnCallback) { /* Add some extra data to the sender */ //aoData.push({ "filtervalue": $('#filtervalue').val(), "Options": $('#Options').val() }); $.getJSON(sSource, aoData.concat($('form').serializeArray()), function (json) { /* Do whatever additional processing you want on the callback, then tell DataTables */ fnCallback(json) }); } }); }); 

在ASP.NET MVC中处理URL时,绝对总是使用URL帮助程序。 绝对不会像你那样硬编码url。

所以:

 "sAjaxSource": "@Url.Action("GetData", "Home")" 

如果这是在一个单独的javascript文件中,您可以在#example上使用HTML5 data-*属性:

 
...

然后在你单独的js中你可以使用.data()方法:

 "sAjaxSource": $('#example').data('url') 

我认为你的道路应该是

 "sAjaxSource": "/home/details/home/getdata", 

并且不应该将getdata作为getdata.php之类的文件名

 "sAjaxSource": "/home/details/home/getdata.php", 

您是否尝试在Ajax源之前设置一个前导斜杠?

 "sAjaxSource": "/Home/GetData/" 

UPDATE

如下面的评论中所述,对URL进行硬编码可能会导致以后出现问题。

Darin已经发布了关于使用内置URL帮助程序的内容,因此我不会编辑我的post以包含该信息。 我这样做的方式略有不同,如下所示:

创建UrlHelper的扩展方法以从Route生成您的URL

我发现这种工作方式在与前端团队合作时非常有用。 他们发现很容易理解Url.RequestedPage()格式,这意味着他们每次想要链接或请求某些内容时都不需要我的帮助。