Razor actionlink自动生成?URL中的长度= 7?

时间:2010-12-05 07:40:10

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor asp.net-mvc-5

我在剃刀页面上有以下链接:

@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。为什么会自动生成?

3 个答案:

答案 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重载并不是最直接的事情。