MVC:Html.ActionLink()解析为(编辑?长度=)而不是(编辑?Id =)

时间:2014-04-22 14:32:39

标签: asp.net-mvc asp.net-mvc-4 razor actionlink

我在MVC 4应用程序中创建了一个Admin区域。在名为UserManage的视图文件夹下,我使用Grid.MVC在多个页面上列出用户(5个组)。在网格中,我列出了供管理员查看的用户详细信息,并添加了:

  • 包含复选框[]。
  • 的列
  • 包含EDIT链接的列。
  • CREATE按钮。
  • 一个DELETE按钮(与每行的复选框一起使用)。

我的用户详细信息页面位于我的管理区域中,位于以下路径:Project\Areas\Admin\Views\UserManage\Index.cshtml。在我的EDIT liniks上,我正在尝试在Project\Areas\Admin\Views\UserManage\Edit.cshtml上提取视图,并将个人UserID传递给视图以提取用户数据。

在我目前的代码中,我的浏览器解析为http://localhost:62517/Admin/UserManage/Edit?Length=4,其中包含IIS 8.0 404错误( Controller无法找到UserID )。但是,如果我按照以下方式手动将Length更改为Id,那么一切都按预期进行,我最终会在Edit视图上发布:http://localhost:62517/Admin/UserManage/Edit?Id=4

以下是Index.cshtml页面的网格代码。有谁知道我需要在我的Html.ActionLink()上修改哪些内容,以便我的路线将解析为?Id=而不是?Length=?:

<div class="overflowPrevention">
    @Html.Grid(Model).Columns(columns =>
        {
            columns.Add().Encoded(false).Sanitized(false).SetWidth(30).RenderValueAs(o => @Html.CheckBox("checked", false));
            columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => Html.ActionLink("Edit", "Edit", "Edit", new { id = "1" }));

        }).AutoGenerateColumns()
</div>

1 个答案:

答案 0 :(得分:5)

您使用了错误的重载。

@Html.ActionLink(string linkText, string actionName, string controllerName, object htmlAttributes)

而不是

@Html.ActionLink(string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)

如果您不需要使用它们,则可以为htmlAttributes传递null:

Html.ActionLink("Edit", "Edit", "UserManage", new { id = "1" }, null)

我不知道你为什么要使用编辑,编辑,编辑。我认为这是一个错字,所以我改变它以使用UserManage作为控制器名称。