使用HTML.ActionLink的ASP.net MVC site.master链接

时间:2009-06-29 03:40:27

标签: asp.net-mvc actionlink

我在site.master的菜单中有以下代码:

<ul id="menu">              
    <li><%= Html.ActionLink("My Contact Info", "DetailsbyUserName/" + Html.Encode(Page.User.Identity.Name), "Users")%></li>
</ul>

当我将鼠标悬停在网址上时,我发现它指向:

http://site/Users/DetailbyUserName/[name]

这是正确的。

问题是当我在下面的Users控制器类中放置一个断点时:

public ActionResult DetailsbyUserName(string loginName)
{
    UserInfo user = repo.GetUserByName(loginName);
    return View(user);
}

似乎loginName参数始终为null

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

问题是您没有设置路由来指定名为“loginName”的参数。

我猜测您的默认路由正在吞咽您的请求,并尝试将[name]值分配给名为“id”的参数。如果您从“loginName”将参数名称更改为“id”,我敢打赌它会对您有用。

请记住,路由引擎将每个URL段映射到命名参数。默认路由如下:"{controller}/{action}/{id}"。如果你想要一个名为“loginName”的参数,你必须想出一个具有段"{controller}/{action}/{loginName}"的路由,它与默认路由不同,所以默认路由首先不匹配

答案 1 :(得分:0)

尝试:

Html.ActionLink("My Contact Info", "DetailsbyUserName", "Users", new { loginName = Html.Encode(Page.User.Identity.Name), null);

如果您的控制器是这样的:

public ActionResult DetailsbyUserName(string veryVeryLongParameterName);

我猜你必须在ActionLink的routeValues参数中使用新的{veryVeryLongParameterName =“YourParamValue”}。

而且,你需要一条路线。

我对此也很陌生,至少这是我对ActionLinks的理解,希望有人能更好地解释它。