使用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()
格式,这意味着他们每次想要链接或请求某些内容时都不需要我的帮助。