2012-10-18 125 views
2

我有以下型號:Html.ActionLink魔術

public class AccountDetailsViewModel 
{ 
    public Guid ID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

然後我的AccountController與followign行動

public ActionResult Details(Guid? id) 
{ 
    var model = new AccountDetailsViewModel 
    { 
     ID = 2, 
     FirstName = "FirstName", 
     LastName = "LastName" 
    }; 
    return View(model) 
} 

而且極力爲這一行動

@model AccountDetailsViewModel 
... 
@Html.ActionLink("My Page", "Details", "Account") 
... 
//display info about user 

的想法類型視圖是當用戶訪問帳戶/詳細信息url沒有ID參數時,他自己的信息顯示,並且當id存在顯示有關該用戶的URL信息。

問題是,當用戶訪問帶有id(某人的其他頁面)的url時,鏈接我的頁面(位於視圖頂部)指向同一頁面。 ActionLink需要當前顯示的用戶的ID,這是一個問題,因爲我希望我的頁面鏈接始終指向帳戶/詳細信息(到我的頁面)。 ActionLink的這個ID不是來自@Model,因爲我首先想到了它,它看起來像是我不熟悉的其他魔法。

與其他頁面有同樣的問題。

那麼發生了什麼以及如何防止這種類型的行爲?

回答

2

如果您未指定它們的內容,則ASP.NET MVC會重新使用路由變量。因此,如果我在某個與路由匹配的elses頁面上,即使您沒有明確說明使用它,他們的ID也會被使用。

@Html.ActionLink("My Page", "Details", "Account", new { id = "" }) 

只需將其設置爲空以清除ID參數即可。

+0

謝謝,它的工作原理。除了new {id =「」})實現這個(清除id參數)的其他方式是什麼? –

+0

@TarasBilynskyi,這是最簡單的方法。我唯一知道的另一種方法是創建自己的幫助程序,清除RouteData。有關更多詳細信息,請參閱此處:http://stackoverflow.com/q/1148443/74022 – Brandon