C# 为什么我的ActionLink不起作用?

C# 为什么我的ActionLink不起作用?,c#,asp.net-mvc,C#,Asp.net Mvc,我有这样一个控制器方法: public ActionResult Foo2(int uId) { return View(); } 现在,我添加了一个操作链接: @Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }) 但当我点击它时,结果是: .../Main/Foo2?Length=8 为什么这不起作用?MVC调用了错误的重载,因为它有几个具有相同参数计数的方法。试试这个: @Html.ActionLink("Test

我有这样一个控制器方法:

public ActionResult Foo2(int uId)
{
    return View();
}
现在,我添加了一个操作链接:

@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 })
但当我点击它时,结果是:

.../Main/Foo2?Length=8

为什么这不起作用?

MVC调用了错误的重载,因为它有几个具有相同参数计数的方法。试试这个:

@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }, null)

另请参见。

您使用了错误的
ActionLink
方法重载。您应该使用:

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 }, null)
此重载将解释
新的{uId=12}
用作路由值,而不是HTML属性。您使用的重载将
new{uId=12}
解释为具有动作链接的TML属性的对象。通过调用上面指定的重载,您可以传入
null
作为第五个参数,该参数现在将用于HTML属性,并将您的对象作为路由值

通过查看渲染的内容,我们可以很容易地看到发生了什么:

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 })
// Renders: <a href="/Home/Foo2?Length=4" uId="12">Test</a>

@Html.ActionLink("Test", "Foo2", "Home", new { @class = "test-class" })
// Renders: <a class="test-class" href="/Home/Foo2?Length=4">Test</a>

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 }, null)
// Renders: <a href="/Home/Foo2?uId=12">Test</a>

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 }, new { @class = "test-class" })
// Renders: <a class="test-class" href="/Home/Foo2?uId=12">Test</a>
@Html.ActionLink(“Test”,“Foo2”,“Home”,new{uId=12})
//呈现:
@ActionLink(“Test”,“Foo2”,“Home”,new{@class=“Test class”})
//呈现:
@ActionLink(“Test”,“Foo2”,“Home”,new{uId=12},null)
//呈现:
@ActionLink(“Test”,“Foo2”,“Home”,new{uId=12},new{@class=“Test class”})
//呈现:
希望这能让事情变得明朗一点。

另一种说法是,你应该试试这个顺序:

@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }, null)

我的目标是:…/Main/Foo2,但缺少uId:(@gurehbgui请参见编辑。应为最后一个参数
htmlAttributes
传递
null
)。