在使用传递的值的MVC中链接存在的问题

14 浏览
0 Comments

在使用传递的值的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什么都不做,但当我开始编码时,它将返回一个视图,允许已登录用户更新其个人资料并查看其活动。

我没有看到这两个链接之间的任何区别,除了其中一个设置了类。有人能帮我理解为什么第二个链接不工作吗?

提前感谢!

0
0 Comments

问题出现的原因是使用了错误的重载方法。在这种情况下,正确的重载方法是:

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"});

0