MVC中使用传递给它们的值的链接问题

时间:2014-09-11 12:24:42

标签: asp.net-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

到目前为止,帐户控制器中的管理 ActionResult什么也没做,但是当我开始编码时,它只返回一个允许登录用户更新其个人资料并查看的视图他们的活动。

据我所知,除了在其中一个上设置的课程之外,这两个链接没有区别。有人可以帮助我理解为什么第二个链接不起作用吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

要回答原始问题,使用了错误的重载。此实例中的正确重载是:

LinkText,ActionResult,Controller,RouteValues(object),HTMLAttributes(object) - 例如:

@Html.ActionLink(User.Identity.Name, "Manage", "Account", new { name = User.Identity.Name }, null)

Q的第二部分 - 使变量“name”成为URL的一部分而不是查询字符串值 - 例如从:

〜/ Account / Manage / name = ortund

〜/帐户/管理/ ortund

您需要为路由配置添加路由,以便MVC知道您的网址的第三部分应包含“name”的值 - 这是通过以下路由完成的:

routes.MapRoute("AccManage", "Account/Manage/{name}", new {.controller = "Account", .action = "Manage"});