我在我的site.master用于菜单下面的代码:

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

当我悬停在URL我看到它指向:

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

这是正确的。

在的问题是,当我把一个断点在下面的Users控制器类:

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

似乎loginName参数总是null

任何建议?

有帮助吗?

解决方案

问题是,你没有路由设置,以指定一个名为“登录名”参数。

我猜你的默认路由正在吞噬你的要求,并试图分配[名]值到一个名为“ID”参数。如果您将参数更改为“ID”,从“登录名”的名称,我敢打赌,它会为你工作。

记住,路由引擎将每个URL段给定参数。默认路由是这样的:"{controller}/{action}/{id}"。如果你想有一个名为“登录名”参数,你就必须拿出一个路由有段"{controller}/{action}/{loginName}",这是从默认的路径不同,使默认路由并没有事先匹配。

其他提示

尝试:

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,希望有人能更好地解释它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top