55

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

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

4

3 回答 3

88

您正在使用的ActionLink覆盖匹配(字符串链接文本、字符串 actionName、对象 routeValues、对象 htmlAttributes)覆盖。因此,您的“配置文件”值正在传递给routeValues参数。此函数关于此参数的行为是获取其上的所有公共属性并将其添加到用于生成链接的路由值列表中。由于字符串只有一个公共属性(长度),因此您最终会得到“长度 = 7”。

您要使用的正确重载是(string linkText, string actionName, string controllerName, Object routeValues, Object htmlAttributes),您称之为 loke:

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"})
于 2010-12-05T19:01:19.383 回答
7

我不确定造成这种情况的确切原因,但将其更改为:

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

当您离开最后一个参数(htmlattributes是添加的参数)时,我不知道 MVC 选择了哪个重载,但这会解决它。这些天的某一天,我会调查并弄清楚到底发生了什么。

于 2010-12-05T08:21:26.557 回答
1

另一件需要注意的事情,因为您在 中定义控制器@ActionLink,您可能不需要这样做,例如,您的“创建新配置文件”@ActionLink表示的视图可能是“/admin/profile/index.cshtml”,列出现有配置文件的视图,在这种情况下,您不需要在 中定义控制器,@ActionLink因为@ActionLink已经相对于ProfileController,因此您@ActionLink可以

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

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

于 2016-12-06T23:51:18.910 回答