asp.net的MVC的Ajax调用

asp.net的MVC的Ajax调用

问题描述:

首先的5需要基本URL我想告诉我在ASP.Netasp.net的MVC的Ajax调用

是新我想有网址像

http://example.com/Controller/Action 

现在的我从脚本中调用网址是这样

$('#datatable').dataTable({ 
    "aoColumnDefs": [{ 'bSortable': false, 'aTargets': [-1] }], 
    "oLanguage": { "oPaginate": { "sPrevious": "", "sNext": "" } }, 
    "iDisplayLength": 5, 
    "aLengthMenu": [[5, 10, 25, 50, -1], [5, 10, 25, 50, "All"]], 
    "sDom": 'T<"panel-menu dt-panelmenu"lfr><"clearfix">tip', 
    "oTableTools": { 
     "sSwfPath": "vendor/plugins/datatables/extras/TableTools/media/swf/copy_csv_xls_pdf.swf" 
    }, 
    "sAjaxSource": "admin/Categories", 
}); 

目前使用相对URL

"sAjaxSource": "admin/Categories/Index/" 

这个网址的问题是它是相对的网址,因为我想在定义cotroller和动作之前定义基础网址。

我如何实现是在标签下的.cshtml文件?

如果我这样做是错误的方式,请纠正我,并告诉我正确的方法,我应该如何实现的Ajax调用的网址?


更新: 对不起,我忘了提,我使用MVC领域,我想有基本URL地区。 管理员在区域目录下定义。

+1

它只是一个'.cshtml'文件,你可以在App_Code文件夹中创建(右键单击项目 - >添加 - >添加ASP .NET文件夹 - > App_Code)。您无需执行任何操作即可使用基本网址,它会告知浏览器从哪里请求。所以,如果你在请求'/ page.html'的时候将base url设置为'/ application/site',它会查看'/ application/site/page.html'。 – John 2014-10-31 21:43:02

生成你的动作网址的最好方法是:

@Url.Action("ActionName", "ControllerName", new { area = "AreaName" }) 

如果您使用的是Razor视图中的脚本标签,你可以使用UrlHelper:

'sAjaxSource': '@Url.Action("index", "categories", new { area = "admin" })' 

否则,你也可以把它基于root用户的URL有:

"/admin/Categories" 
+0

哦对不起,我的坏。管理员是区域,类别是控制器,索引是操作。我没有编写索引,因为它自动地去那里。 我正在使用MVC区域。 – 2014-10-31 17:00:27

+0

@SizzlingCode正如M.Azad所示,它仍然有效,您只需添加区域路由值。 – 2014-10-31 17:04:47

+0

是的,我复制了他的代码,它在区域下工作。谢谢。 – 2014-10-31 17:07:20

我发现的最好的方法是定义你的base ur l在HTML中的布局

<html lang="en"> 
<head> 
    <meta charset="utf-8" /> 
    <base href="@Functions.GetApplicationPath(Request)" /> 
    // Other header stuff 
</head> 

,并定义@函数在App_Code文件夹中(可能需要创建它)

@functions { 

    public static string GetApplicationPath(HttpRequestBase request) 
    { 
     // Gets the base url in the following format: "http(s)://domain(:port)/AppPath); 
     var applicationPath = request.Url.Scheme + "://" + request.Url.Authority + GetApplicationType(request); 
     if (string.IsNullOrWhiteSpace(applicationPath) || !applicationPath.EndsWith("/")) 
     { 
      applicationPath += "/"; 
     } 

     return applicationPath; 
    } 

    public static string GetApplicationType(HttpRequestBase request) 
    { 
     var applicationType = request.ApplicationPath; 
     return applicationType; 
    } 
} 

这使您可以分离出你的CSHTML和您的JavaScript这样你就可以使用相对URL和基地址将处理任何网站前缀,如http://yoururl/blah/actualsiteHere