Razor actionlink 在 URL 中自动生成 ?length=7?
Posted
技术标签:
【中文标题】Razor actionlink 在 URL 中自动生成 ?length=7?【英文标题】:Razor actionlink autogenerating ?length=7 in URL? 【发布时间】:2011-05-20 11:04:33 【问题描述】:我在剃须刀页面上有以下链接:
@html.ActionLink("Create New Profile", "Create", "Profile", new @class="toplink" )
在源视图页面出现如下图:
<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a>
当我点击链接时,URL 是这样的:
http://localhost:54876/admin/profile/create?length=7
我不想要?length=7
。为什么会自动生成?
【问题讨论】:
这一定与您的路线有关。默认情况下,ActionLink
应该生成 /Profile/Create
的 href。其中Profile
是控制器参数,Create
是操作方法参数。 /admin
被放在 href 中的事实突出了这个问题。你能显示你的路线吗?
您可能正在使用wrong overload
【参考方案1】:
您使用的 ActionLink
覆盖与 (string linkText, string actionName, Object routeValues, Object htmlAttributes) 覆盖匹配。因此,您的“个人资料”值被传递给 routeValues
参数。此函数关于此参数的行为是获取其上的所有公共属性并将其添加到用于生成链接的路由值列表中。由于字符串只有一个公共属性(长度),因此您最终会得到“length=7”。
您要使用的正确重载是 (string linkText, string actionName, string controllerName, Object routeValues, Object htmlAttributes),您将其称为 loke:
@Html.ActionLink("Create New Profile", "Create", "Profile", new , new @class="toplink")
【讨论】:
你能帮我澄清一下吗...使用此结构,我的链接生成为~/Account/Manage/
...我必须在我的参数后面放置空的new
,但现在它生成为@987654328 @而我想要~/Account/Manage/ortund
...我似乎无法到达那里,也不明白为什么
有趣的是,官方 MVC bolierplate 在创建“忘记密码”链接时默认滥用此重载。不得不改变它。
有趣的事实:)【参考方案2】:
我不确定造成这种情况的确切原因,但将其更改为:
@Html.ActionLink("Create New Profile", "Create", "Profile", new , new @class="toplink" )
当您省略最后一个参数(htmlattributes
是添加的参数)时,我不知道 MVC 选择了哪个重载,但这会解决它。在这些日子里,我会调查并弄清楚到底发生了什么。
【讨论】:
这种方式对我有用,但我仍然得到了一个流浪汉链接......我得到了~/Account/Manage/user=ortund
,而我需要的是~/Account/Manage/ortund
你可以只使用null。至少这是我一直使用的。【参考方案3】:
另外需要注意的是,由于您在 @ActionLink
中定义控制器,您可能不需要这样做,例如,您的“创建新配置文件”@ActionLink
表示的视图可能是“/ admin/profile/index.cshtml",列出现有配置文件的视图,在这种情况下,您不需要在@ActionLink
中定义控制器,因为@ActionLink
已经相对于ProfileController
,所以您的@ 987654326@可能是
@Html.ActionLink("Create New Profile", "Create", null, new @class="toplink" )
我使用null
而不是new
作为标记的答案,我认为这更适合我自己。 ActionLink 重载并不是最直接的事情。
【讨论】:
以上是关于Razor actionlink 在 URL 中自动生成 ?length=7?的主要内容,如果未能解决你的问题,请参考以下文章
在 Razor 的 Javascript 中嵌入 Html.ActionLink
ActionLink 与 ASP.NET MVC3 中的多个类