在使用传递的值的MVC中链接存在的问题
在使用传递的值的MVC中链接存在的问题
大部分情况下,我的链接(如下所示)都能正常工作,但偶尔会出现一些奇怪的情况,即链接实际导向的URL毫无意义。
工作链接示例
这个链接完全正常工作。类中包含一个背景图片,以便在页面上显示链接。
@Html.ActionLink(" ", "Edit", new { id = user.PKey }, new { @class = "edit-button" })
这个链接导航到~/Users/1
,假设传递给它的id值为1。
损坏的链接
这个链接根本不工作:
@Html.ActionLink(User.Identity.Name, "Manage", "Account", new { name = User.Identity.Name })
这个链接出现在欢迎消息的一部分。链接文本是我的用户名,所以我以为它会导航到~/Account/Manage/ortund
,但实际上它导航到~/Home/Manage?Length=7
目前,Account Controller中的Manage ActionResult什么都不做,但当我开始编码时,它将返回一个视图,允许已登录用户更新其个人资料并查看其活动。
我没有看到这两个链接之间的任何区别,除了其中一个设置了类。有人能帮我理解为什么第二个链接不工作吗?
提前感谢!
问题出现的原因是使用了错误的重载方法。在这种情况下,正确的重载方法是:
LinkText,ActionResult,Controller,RouteValues(object),HTMLAttributes(object) - 例如:
.ActionLink(User.Identity.Name, "Manage", "Account", new { name = User.Identity.Name }, null)
问题的第二部分 - 将变量"name"作为URL的一部分,而不是查询字符串的值 - 例如,从:
~/Account/Manage/name=ortund
到
~/Account/Manage/ortund
您需要在路由配置中添加一个路由,以便MVC知道URL的第三部分应包含"name"的值 - 可以通过以下路由来实现:
routes.MapRoute("AccManage", "Account/Manage/{name}", new {.controller = "Account", .action = "Manage"});