2

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/[名称]

哪个是对的。

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

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

似乎loginName参数总是null.

有什么建议么?

4

2 回答 2

3

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

我猜你的默认路由正在吞下你的请求,并试图将 [name] 值分配给一个名为“id”的参数。如果您将参数的名称从“loginName”更改为“id”,我敢打赌它会为您工作。

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

于 2009-06-29T04:19:04.097 回答
0

尝试:

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

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

public ActionResult DetailsbyUserName(string veryVeryLongParameterName);

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

而且,你需要一条路线。

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

于 2009-06-29T04:17:41.350 回答