我在剃刀页面上有以下链接:
@Html.ActionLink("Create New Profile", "Create", "Profile", new { @class="toplink" })
它出现在视图源页面中,如下所示:
<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a>
当我点击链接时,网址如下:
http://localhost:54876/admin/profile/create?length=7
我不想?length=7
。为什么会自动生成?
答案 0 :(得分:88)
ActionLink
覆盖您正在使用与(string linkText, string actionName, Object routeValues, Object htmlAttributes)覆盖匹配的内容。因此,您的“个人资料”值将传递给routeValues
参数。此函数关于此参数的行为是获取其上的所有公共属性,并将其添加到用于生成链接的路由值列表中。由于String只有一个公共属性(Length),因此最终会得到“length = 7”。
您要使用的正确重载是(string linkText, string actionName, string controllerName, Object routeValues, Object htmlAttributes),您可以将其称为loke,所以:
@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"})
答案 1 :(得分:7)
我不确定这个的确切原因,但改为:
@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" })
我不知道当你离开最后一个参数(htmlattributes
是添加的参数)时,MVC正在挑选哪个重载,但这将解决它。有一天我会调查并弄清楚到底发生了什么。
答案 2 :(得分:0)
另外需要注意的是,由于您在@ActionLink
中定义了控制器,您可能不需要这样做,例如,您的“创建新配置文件”@ActionLink
表示的视图可能是“/admin/profile/index.cshtml”,这是一个列出现有配置文件的视图,在这种情况下,您不需要在@ActionLink
中定义控制器,因为@ActionLink
已经相对于ProfileController
,因此@ActionLink
可能是
@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" })
我使用null
代替new{}
作为标记答案,我认为这更合适。 ActionLink重载并不是最直接的事情。