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

Ana*_*tic 1 asp.net-mvc actionlink razor asp.net-mvc-4

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

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

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

在我下面的当前代码中,我的浏览器解析为http://localhost:62517/Admin/UserManage/Edit?Length=4IIS 8.0 404错误(控制器无法找到UserID).但是如果我手动更改LengthId如下,一切都会按计划,我结束了我的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>
Run Code Online (Sandbox Code Playgroud)

Dis*_*ile 5

您正在使用错误的重载.

@Html.ActionLink(string linkText, string actionName, string controllerName, object htmlAttributes)
Run Code Online (Sandbox Code Playgroud)

代替

@Html.ActionLink(string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)
Run Code Online (Sandbox Code Playgroud)

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

Html.ActionLink("Edit", "Edit", "UserManage", new { id = "1" }, null)
Run Code Online (Sandbox Code Playgroud)

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