我有一个像这样的控制器方法:
public ActionResult Foo2(int uId)
{
return View();
}
现在我添加了一个动作链接:
@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 })
但点击它的结果是:
.../Main/Foo2?Length=8
为什么这不起作用?
答案 0 :(得分:5)
MVC正在调用错误的重载,因为它有一些具有相同参数计数的方法。试试这个:
@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }, null)
答案 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)