2014-10-31 87 views
0

首先的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

回答

2

生成你的動作網址的最好方法是:

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

如果您使用的是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

2

我發現的最好的方法是定義你的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