我在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
。
有什么建议吗?
答案 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的理解,希望有人能更好地解释它。