1

我有这样的动作:

public ActionResult UserDetails(string id)
{
}

context.MapRoute(
            "Admin_Default",
            "{controller}/{action}/{id}",
            new { action = "Index", controller = "Start", id = UrlParameter.Optional }
        );

在另一个视图中,我有一个来自 .net 标准会员管理的用户列表 想法是您单击用户名以显示详细信息,并且仅当用户名是一个单词时才有效。我最近遇到了一个类似这样的用户名:

史蒂文·CH·安德森

所以我用它来生成链接:

@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>
4

2 回答 2

0

编码显然是错误的,因为它将空格编码为“%2b”,即“+”。您传递的不是查询字符串参数,而是路径的一部分,因此您需要使用 HttpUtility.UrlPathEncode()

于 2013-07-06T22:28:33.630 回答
0

我有同样的问题,这是我解决它的方法,但我不确定这是最好的方法。我很想听到更优雅的解决方案。

在视图文件中:

@Html.ActionLink(Model.UserName, "UserDetails", new { controller = "Security", id = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Model.UserName)) })

在控制器文件中:

id = Encoding.UTF8.GetString(Convert.FromBase64String(id))
于 2013-08-21T12:30:54.857 回答