2011-07-22 48 views
1

我有一個名爲「abc」的Asp.net MVC 3項目。當在VS中運行調試時,它顯示http://localhost:23543/abc/....。將URL http://hostname/webAppName/abc/...發佈項目之後在虛擬文件夾中的IIS 7如何獲取Asp.Net MVC 3當前項目名稱?

但是默認的Web站點下,有一些jQuery的Ajax調用,使用'/scripts/...',在分離外部 js文件。 '/scripts/'的絕對路徑將變爲...wwwroot/abc/scripts/...而不是...wwwroot/webAppName/abc/scripts/...。我正在創建一個用於包裝ajax url鏈接的js函數。

var fullPath = '@HttpContext.Current.Request.Url.Scheme://@HttpContext.Current.Request.Url.Authority'; 
function GetPath(projectName, url) { 
    return fullPath + projectName + url; 
} 

在js文件:... url: GetPath('/scripts/...')....

如何獲得這個項目的名字嗎?還是有更好的解決方案?

回答

2

使用下面的代碼來創建MVC請求URL

var siteRoot = '@Url.Content("~/")'; 
function GetPath(url) { 
    return siteRoot + url; 
} 
2

在您的標記,你可以使用網站相對URL,將在運行時被翻譯成正確的形式:

<script type="text/javascript" src="@Url.Content("~/Scripts/myscript.js")"></script> 
+0

哦心裏很不舒服,我沒有仔細閱讀不夠。我看到你想使用來自單獨文件的URL。這對此沒有幫助。 –

2

通常在腳本什麼我傾向於做的是AJAXify現有的錨鏈接或形式,其已經具有正確的URL,因爲它們是使用HTML助手生成的。

因此,例如,與形式(使用Html.BeginForm輔助生成):

$('#myform').submit(function() { 
    $.ajax(} 
     url: this.action, 
     type: this.method, 
     data: $(this).serialize(), 
     success: function(result) { 

     } 
    }); 
    return false; 
}); 

或有錨(使用Html.ActionLink輔助生成):

$('#mylink').click(function() { 
    $.ajax(} 
     url: this.href, 
     type: 'POST', 
     success: function(result) { 

     } 
    }); 
    return false; 
}); 

當然可能存在一些情況,其中您需要鏈接或表單以外的網址。在這些情況下,我傾向於使用某些DOM元素上的HTML5 data-*屬性。例如:

<div id="foo" data-url="@Url.Action("SomeAction", "SomeController")">foo bar</div> 

,當我需要這個網址我只想:

var url = $('#foo').data('url'); 

見我們都不怎麼需要任何GetPath功能。所有的URL已經是我們的DOM的一部分,並且在單獨的JavaScript文件中,我們只是簡單地使用它們。