我在Global.asax.cs中有这个:
routes.MapRoute(
"User",
"User/{username}/{action}",
new { controller = "User", action = "Index", username = "*" }
);
然后在我的_Layout.cshtml上我有这段代码:
<ul id="menu">
@if (!String.IsNullOrEmpty(Context.User.Identity.Name))
{
<li>@Html.ActionLink("Home", "Home", new { controller = "User" }, new { username = Context.User.Identity.Name })</li>
}
</ul>
</div>
</div>
问题是,它会在第一次在这里摆动时正确呈现链接。 (链接将是/ User / rob / Home,其中“rob”是用户名。如果我在页面上的其他位置导航然后单击我的链接,则链接将呈现为/ User / * / Home。当我单步执行代码,Context.User.Identity.Name每次都是正确的。
我错过了一些非常基本的东西吗?我不确定该搜索什么。
答案 0 :(得分:0)
这正是你应该期待的那条路线。您没有在路由值字典中指定username
,而是在HTML属性中指定*
,因此它采用路由的默认值@if (!String.IsNullOrEmpty(Context.User.Identity.Name))
{
<li>@Html.ActionLink("Home", "Home", "User" new { username = Context.User.Identity.Name }, null )</li>
}
。您应该使用签名,该签名允许您将控制器和操作指定为字符串中具有其他路由值的字符串。
{{1}}