2011-05-06 80 views
3

我在嘗試使用UrlHelperAction()方法指向我網站上的/Home/Index操作時遇到問題。我需要生成的客戶端腳本鏈接到Index動態(包括id參數),所以我做了很明顯的:ASP.NET MVC UrlHelper.Action()沒有返回正確的路徑

var url = '@this.Url.Action("Index", "Home")'; 
function generateLink (id) { 
    var anchor = "<a href='" + url + "/" + id + "'>Select Me</a>" 
    return anchor; 
} 

但這裏所產生的錨標籤是這樣的:

<a href='http://localhost//1013'>Select Me</a> 

顯然沒有路由到正確的操作。我假設Url.Action()是「智能」,通過確定HomeIndex是我默認路由的默認值,所以http://localhosthttp://localhost/Homehttp://localhost/Home/Index在功能上是相同的,但我需要以某種方式強制它選擇完整的URL選項。

有沒有辦法做到這一點,或者我將不得不建立自己的URL?

編輯:

我沒有改變從默認路由的一個新的MVC3項目:

public static void RegisterRoutes (RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new 
     { 
      controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
     } // Parameter defaults 
    ); 
} 

答:

我最後用@貝麗的回答略有變化去,因爲如果我可以使用它,我更喜歡Html.ActionLink()到Url.Action:

var anchor = '@this.Html.ActionLink("Select Me", "Index", "Home", new { id = "XXX" }, null)'; 

function generateLink (id) { 
    return anchor.replace("XXX", id); 
} 
+0

我們需要看到路由定義(全部爲優選),所以我們可以看到如果存在衝突或者您沒有指定路線的參數。 – casperOne 2011-05-06 14:07:31

回答

2

一個哈克方法是做這樣的事情:

var url = '@this.Url.Action("Index", "Home", new { id = 1})'; 
function generateLink (id) { 
    var anchor = "<a href='" + url.replace("1",id) + "'>Select Me</a>" 
    return anchor; 
} 
+0

是的,這有效,但我不喜歡它。如果沒有更好的事情出現,我會將其標記爲答案。 (我不喜歡它,主要是因爲這些網址看起來很奇怪:「http:// localhost /?id = 1013」 – 2011-05-06 14:12:00

+0

告訴你這是一個黑客;) – BFree 2011-05-06 14:12:49

+0

+1其實並不hacky我不認爲。也許'new {id =「_placeholder_」}'會更好。有了一個Web服務,我看不到其他方式。 – 2011-05-06 14:13:29

0

一種解決方法可以是:

function generateLink (id) { 
    var anchor = "<a href='/?id=" + id + "'>Select Me</a>" 
    return anchor; 
}