为什么我的ActionLink不起作用?

时间:2013-05-29 10:40:07

标签: c# asp.net-mvc

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

public ActionResult Foo2(int uId)
{
    return View();
}

现在我添加了一个动作链接:

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

但点击它的结果是:

.../Main/Foo2?Length=8

为什么这不起作用?

3 个答案:

答案 0 :(得分:5)

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

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

另见this question

答案 1 :(得分:5)

您正在使用ActionLink方法的错误重载。你应该使用:

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

此重载将解释new { 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>

希望这有点清除它。

答案 2 :(得分:0)

根据其他Stackoverflow Question,您应该尝试以下订单:

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