使用ASP.net MVC的Site.Master链接HTML.ActionLink
-
20-08-2019 - |
题
我在我的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,希望有人能更好地解释它。
不隶属于 StackOverflow