剃刀动作链接自动生成?长度= 7的URL?

我有链接在下面的剃刀页面。

@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 

我不想要?长度= 7。 为什么这是自动生成的。

ActionLink覆盖您正在使用匹配(stringlinkText,stringactionName,对象routeValues,对象htmlAttributes)覆盖。 所以你的“Profile”值被传递给了routeValues参数。 这个函数相对于这个参数的行为是把它的所有公共属性添加到用来生成链接的路由值列表中。 由于一个String只有一个公共属性(Length),所以最终的结果是“length = 7”。

你想要使用的正确的重载是(stringlinkText,stringactionName,stringcontrollerName,对象routeValues,对象htmlAttributes) ,你把它叫做loke :

 @Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"}) 

我不确定这个的确切原因,但将其更改为:

 @Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" }) 

当你离开最后一个参数( htmlattributes是添加的)时,我不知道MVCselect了哪个重载,但是这将修复它。 其中一天,我会调查和确切地发生了什么事情。

另外需要注意的是,由于您在@ActionLink中定义了控制器,您可能不需要这样做,例如,您的“创build新configuration文件” @ActionLink所expression的视图可能是“/ admin / profile / index .cshtml“,一个列出现有configuration文件的视图,在这种情况下,您不需要在@ActionLink定义控制器,因为@ActionLink已经与@ActionLink相关,所以您的@ActionLink可能是

 @Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" }) 

我使用null而不是new{}作为标记的答案,我认为这是更合适的我自己。 ActionLink重载并不是最直接的事情。