2011-05-21 78 views
4

我是新來的MVC2 asp.net項目的工作。ASP.NET:ActionLink返回相對url

我想知道,是有可能有一個這樣的動作鏈接:

<%: Html.ActionLink("[Add To Cart]", "../StoreCart/AddToCart", new { id = Model.id })%> 

注意../StoreCart

這裏有一個返回的URL的例子(我目前在StoreScreen當我看到ActionLink的,但我想出去,「一個級別」可以這麼說):

差(404):http://localhost:8231/StoreScreen/StoreCart/AddToCart?id=9

理想:http://localhost:8231/StoreCart/AddToCart?id=9

謝謝!

PS:爲什麼你就不能像做事情PHP和編寫自定義<a href="<%: index + "/StoreCart/AddToCart?id=" + id %>" > add to cart </a> :)

回答

6

ActionLink不是要指向物理URL,而是指向控制器中的操作。

<%: Html.ActionLink("[Add To Cart]", "AddToCart", "StoreCart", new { id = Model.id }, null)%> 

注:需要最終null因爲此覆蓋的ActionLink都需要它。它是模型,可以是一個對象或null。

Docs

+1

感謝您指出「,null」參數,我沒有注意到它:P – Spectraljump 2011-05-21 22:39:13

4

你不應該傳遞../StoreCart/AddToCart作爲參數傳遞給一個ActionLinkActionLink的第二個參數是動作名稱,我非常懷疑你的動作叫做../StoreCart/AddToCart

所以,你想要的是(這將使用相同的控制器作爲當前請求的URL):

<%: Html.ActionLink("[Add To Cart]", "AddToCart", new { id = Model.id }) %> 

,如果你想設置一個特定的控制器只使用proper overload

<%: Html.ActionLink(
    "[Add To Cart]", 
    "AddToCart", 
    "StoreCart", 
    new { id = Model.id }, 
    null 
) %> 

這裏有一個all available overloads的列表,我會建議你檢查一下。

+0

我已經試過了,並認爲這不是正確的方法。因爲當我使用你的建議時,我得到這個URL:'http:// localhost:8231/StoreScreen/AddToCart?Length = 9'(StoreScreen而不是StoreCart),還有,這個Lenght = 9的東西呢?這是我爲routeValue傳遞的參數字符串的長度:「StoreCart」 – Spectraljump 2011-05-21 22:36:48

+0

@Twodordan,哦,這是由於您的路由配置。 ActionLink只是使用你的路線。 – 2011-05-21 22:37:55

+0

對不起,我的壞,沒有看到null – Spectraljump 2011-05-21 22:38:18