【发布时间】:2013-07-04 15:48:23
【问题描述】:
我有这样的动作:
public ActionResult UserDetails(string id)
{
}
context.MapRoute(
"Admin_Default",
"{controller}/{action}/{id}",
new { action = "Index", controller = "Start", id = UrlParameter.Optional }
);
在另一个视图中,我有一个来自 .net 标准会员管理的用户列表 想法是您单击用户名以显示详细信息,并且仅当用户名在一个单词中时才有效。我最近遇到了一个类似这样的用户名:
史蒂文 C.H.安德森
所以我用它来生成链接:
@Html.ActionLink(Model.UserName, "UserDetails", new { controller = "Security", id = HttpUtility.UrlEncode(Model.UserName) })
但是当我点击它时,我得到:HTTP Error 404.11 - Not Found
如果我点击一个单词的普通用户名,它就像一个魅力。
我假设路由配置不理解这个请求,问题是如何让它工作?
更新
链接:
<a href="/Security/UserDetails/Steven%2bC.H.%2bAndersson">Steven C.H. Andersson</a>
【问题讨论】:
-
您能否发布呈现链接的 HTML 以防万一它不是我们所期望的?
-
只是想一想:您是否尝试过不自己对用户名进行编码,即仅使用
..., id = Model.UserName })? MVC 在处理此类事情时通常非常聪明,使用自己的标准编码/解码。 -
是的,在没有编码的情况下也进行了测试。结果相同。
-
您的编码错误。它应该是
.../UserDetails/Steven%20bC.H.%20Andersson或.../UserDetails/Steven+bC.H.+Andersson -
如果你要删除空格并链接到
StevenC.H.Andersson,它会做什么?我知道这不是一个有效的用户名,但我很好奇您是否会收到401.11或其他错误。
标签: c# asp.net-mvc asp.net-mvc-4 asp.net-routing