8

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

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

现在我为此添加了一个操作链接:

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

但是当我点击它时的结果是:

.../Main/Foo2?Length=8

为什么这不起作用?

4

3 回答 3

6

您使用了错误的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>

希望这能澄清一点。

于 2013-05-29T10:45:15.763 回答
5

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

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

另请参阅此问题

于 2013-05-29T10:43:14.497 回答
0

根据另一个Stackoverflow 问题,您应该尝试以下顺序:

@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }, null)
于 2013-05-29T10:48:48.720 回答