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

Suj*_*yam 27 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>
Run Code Online (Sandbox Code Playgroud)

我的控制器动作就像

public ActionResult CreateParts(int parentPartId)
    {
        HSPartList objHSPart = new HSPartList();
        objHSPart.Id = parentPartId;
        return View(objHSPart);
    }
Run Code Online (Sandbox Code Playgroud)

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

arc*_*hil 63

您正在使用不正确的过载.你应该使用这个重载

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    Object routeValues,
    Object htmlAttributes
) 
Run Code Online (Sandbox Code Playgroud)

而正确的代码将是

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

注意最后的额外参数.对于其他重载,请访问LinkExtensions.ActionLink方法.正如您所看到的string, string, string, object,您没有尝试使用过载.


kro*_*lik 10

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

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


Md.*_*yan 9

除了接受的答案:

如果你打算用

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

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

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

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