从Html.ActionLink传递参数到控制器操作

27

这段html有什么问题吗?我想在主页面上放一个链接,以便导航到“CreateParts”视图。我的控制器“PartList”中有一个带有参数parentPartId的动作'CreateParts'。

<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的菜单中点击“创建新零件”时,出现异常。请帮帮我。


2
在问题中添加异常信息会更好 :) - Øyvind Bråthen
14
伙计,那个可怜的 li 标签上为什么要加上 runat=server?不要违背 MVC 原则 :) - rouen
Rouen,你能帮忙分享一下ASP.NET MVC的最佳实践吗? - Suja Shyam
这并不是最佳实践,而是基本概念。学习一下runat=server在WebForms中的作用以及为什么在MVC中不需要它。我建议首先阅读关于WebForm和MVC背后模式的“背景”资料。 - rouen
3个回答

65

您正在使用不正确的重载。您应该使用此重载。

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方法。正如您所看到的,没有您尝试使用的string,string,string,object重载。


1
你很棒,@archill。你节省了很多时间,谢谢。 - Asif Mehmood
谢谢,我漏了 null。 - Jawand Singh

10

您正在使用错误的ActionLink重载。请尝试以下操作:

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

9
除了已接受的答案外,
如果您要使用
 @Html.ActionLink("LinkName", "ActionName", "ControllerName", new { @id = idValue, @secondParam= = 2 },null)

这将创建一个ActionLink,你不能为链接创建新的自定义属性或样式。

然而, ActionLink扩展中的第四个参数将解决这个问题。使用第四个参数按照你的方式进行自定义。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接