C# ActionLink-指定控制器名称时的奇怪行为

C# ActionLink-指定控制器名称时的奇怪行为,c#,asp.net-mvc-4,extension-methods,actionlink,C#,Asp.net Mvc 4,Extension Methods,Actionlink,我有以下扩展方法: public static MvcHtmlString GenerateBodyCellContentFor( this HtmlHelper helper, Goal goal, GoalProperty property) { if (property == GoalProperty.Name) { return LinkExtensions.ActionLink(

我有以下扩展方法:

public static MvcHtmlString GenerateBodyCellContentFor(
    this HtmlHelper helper,
    Goal goal,
    GoalProperty property)
    {
        if (property == GoalProperty.Name)
        {
            return LinkExtensions.ActionLink(
                helper,
                goal.Name,
                "Show",
                new
                {
                    goalId = goal.GoalId
                });
        }

        // rest of the code irrelevant
    }
这将按预期工作,并生成以下链接:

http://localhost:54913/Goal/Show?goalId=19013
由于某些情况,我现在需要显式指定控制器名称。因此,我将方法更改为以下内容:

public static MvcHtmlString GenerateBodyCellContentFor(
    this HtmlHelper helper,
    Goal goal,
    GoalProperty property)
    {
        if (property == GoalProperty.Name)
        {
            return LinkExtensions.ActionLink(
                helper,
                goal.Name,
                "Show",
                "Goal",                           // the only change in code
                new
                {
                    goalId = goal.GoalId
                });
        }

        // rest of the code irrelevant
    }
结果,令我惊讶的是:

http://localhost:54913/Goal/Show?Length=4
我尝试了三次删除和添加控制器参数,因为我不相信这会发生。这是唯一的改变,它导致了这种行为

length参数等于controller name的长度(仅使用不同的字符串进行检查)

你知道可能发生了什么吗?

作为解释,问题的原因是没有一个重载与我需要的方式匹配。此问题的最简单解决方案是:

return LinkExtensions.ActionLink(
    helper,
    goal.Name,
    "Show",
    "Goal",
    new
    {
        goalId = goal.GoalId
    },
    null);

这个问题和这个类似,那个电话和哪个相匹配?看起来不合适。@DGibbs确实,没有重载按照我想要的方式来拟合参数。@Lasooch这可能会解释
长度的来源。@sqladmin这很有帮助,谢谢。我会回答这个问题,以防有人找到它,而不是你链接的那个。