将参数传递给Html.ActionLink中的控制器操作

时间:2011-11-28 09:39:19

标签: asp.net-mvc html.actionlink

这个HTML有什么问题吗?我想在母版页中有一个链接导航到“CreateParts”视图。我有动作'CreateParts',它在控制器'PartList'中有一个参数parentPartId。

<li id="taskAdminPartCreate" runat="server">
                                    <%= Html.ActionLink("Create New Part", "CreateParts", "PartList", new { parentPartId = 0 })%></li>

我的控制器操作就像

public ActionResult CreateParts(int parentPartId)
    {
        HSPartList objHSPart = new HSPartList();
        objHSPart.Id = parentPartId;
        return View(objHSPart);
    }

当我点击SiteMaster菜单中的“创建新部件”时,我会遇到异常。请帮我解决这个问题。

3 个答案:

答案 0 :(得分:62)

您使用的是错误的重载。你应该使用这个重载

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    Object routeValues,
    Object htmlAttributes
) 

正确的代码是

<%= Html.ActionLink("Create New Part", "CreateParts", "PartList", new { parentPartId = 0 }, null)%>

注意最后的额外参数。 对于其他重载,请访问LinkExtensions.ActionLink Method。如您所见,您尝试使用string, string, string, object重载。

答案 1 :(得分:10)

您正在使用ActionLink的错误重载。试试这个

<%= Html.ActionLink("Create New Part", "CreateParts", "PartList", new { parentPartId = 0 }, null)%>

答案 2 :(得分:9)

除了接受的答案:

如果您打算使用

 @Html.ActionLink("LinkName", "ActionName", "ControllerName", new { @id = idValue, @secondParam= = 2 },null)

这将创建actionlink,您无法为链接创建新的自定义属性或样式。

但是,ActionLink扩展中的第4个参数将解决该问题。以您的方式使用第4个参数进行自定义。

 @Html.ActionLink("LinkName", "ActionName", "ControllerName", new { @id = idValue, @secondParam= = 2 }, new { @class = "btn btn-info", @target = "_blank" })