2012-10-08 43 views
3

我想編寫一個返回站點url的小幫手函數。 來自PHP和Codeigniter,我非常沮喪,我無法按照自己想要的方式工作。在mvc上獲取網站url

這裏就是我想:

@{ 
    var urlHelper = new UrlHelper(Html.ViewContext.RequestContext); 
    var baseurl = urlHelper.Content("~"); 
} 

<script> 
    function base_url(url) { 

     url = url || ""; 
     return '@baseurl' + url; 
    } 
</script> 

我想要回我的應用程序的基本URL,這樣我就可以讓Ajax調用,而不必擔心路徑。以下是我打算如何使用它的方法:

// Development 
base_url(); // http://localhost:50024 

// Production 
base_url("Custom/Path"); // http://site.com/Custom/Path 

我該怎麼做?

編輯

我想絕對路徑,因爲我已經抽象的JS對象,讓我的Ajax調用。 所以假設我有:

function MyController() { 
    // ... js code 
    return $resource('../MyController/:id'); 
} 

// then 
var my_ctrl = MyController(); 
my_ctrl.id = 1; 
my_ctrl.get(); // GET: ../MyController/1 

這工作時,我的路線是http://localhost:8080/MyController/Edithttp://localhost:8080/MyController時會失敗。

+2

爲什麼你需要baseurl,如果你可以用相對路徑進行ajax調用? – Erwin

+1

RequestContext.Url將爲您提供Uri類型請求的URL(http://msdn.microsoft.com/zh-cn/library/system.uri.aspx)。 RequestContext.Url.Host是域名。但是我必須同意@Erwin,你爲什麼要使用絕對URL? –

+0

@Serg好的。我會在下次再做 – codingbiz

回答

2

我設法做到這一點是這樣的:

@{ 
    var url = Request.Url; 
    var baseurl = url.GetLeftPart(UriPartial.Authority); 
} 

謝謝大家!

+0

這是一個不好的方法。正如其他人所說的使用Url.Action或Url.RouteUrl。如果你想要一個絕對URL,那麼只需使用上面提到的方法中的任何一個的重載,這些方法允許你指定方案 - 即http或https。 – Peter

+0

我想你錯過了這一點。我無法使用Url.Action或Url.RouteUrl,因爲我正在使用Javascript。 –

+0

當您渲染視圖時,只需將URL渲染爲一些JS。例如在視圖中: Peter

1

您是否知道@Url.Action("actionname")@Url.RouteUrl("routename")

這兩個都應該做你所描述的。

0

而不是手動創建您的網址,您可以使用@Url.Action()來構建您的網址。

<p>@Url.Action("Index", "Home")</p> 
/Home/Index 

<p>@Url.Action("Edit", "Person", new { id = 1 })</p> 
/Person/Edit/1 

<p>@Url.Action("Search", "Book", new { title = "Gone With The Wind" })</p> 
/Book/Search?title="Gone+With+The+Wind" 

我們去使用此選項絕對最好的理由是,@Url.Action自動將您已在Global.asax文件中定義的個性化網址路線。幹撒哈拉沙漠! :)


就你而言,你可以通過兩種方式創建一個'自定義路徑'。

選項A)

<p>@Url.Action("Path", "Custom")</p> 
/Custom/Path 

選項B)

您可以使用create a route Global.asax文件。因此,您的控制器/操作組合可以是任何您想要的,並且您可以創建自定義虛空路由網址 - 無論控制器/操作組合如何。