与jquery选项卡一起使用时,Html.Actionlink显示错误的控制器名称

Raj*_*esh 3 asp.net-mvc razor asp.net-mvc-3

我使用Jquery选项卡插件在我的视图中有选项卡.

我想要<li><a href="../JobDetails/Index/1234">JobDetails</a></li>作为我的第一个标签.

为此我正在做

   <li>@Html.ActionLink("JobDetails",
                "Index",   // <-- ActionMethod
                "JobDetails",  // <-- Controller Name.
                  new { id = 1234 }
                )</li>
Run Code Online (Sandbox Code Playgroud)

但我查看源代码给我看这个链接

<li><a href="/Coordination?Length=10" id="1234">JobDetails</a></li>
Run Code Online (Sandbox Code Playgroud)

其中Coordination是我的控制器名称,我在Coordination控制器上有这些选项卡,Action name(ViewName)是Index.

我不确定为什么我将控制器名称作为协调,即使我将其命名为JobDetails.

小智 11

那是因为你使用了错误的重载方法.试试这个:

    <li>
    @Html.ActionLink
    (
        "JobDetails", 
        "Index",   // <-- ActionMethod 
        "JobDetails",  // <-- Controller Name. 
        new { id = 1234 },
        null // pass a null value for the htmlAttributes object
    )
    </li>
Run Code Online (Sandbox Code Playgroud)

你原来的重载方法是这样的:

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

从上面的参数名称可以看出,您将传递"JobDetails"作为链接文本,依此类推.这就是你获得渲染标记的原因.

但是,通过使用这种超载,您只需要传递nullhtmlAttributes对象来获取你想要的标记:

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

  • +1 ActionLink过载了很多.确保使用正确的http://msdn.microsoft.com/en-us/library/system.web.mvc.html.linkextensions.actionlink.aspx (2认同)