2012-10-18 90 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