我有一个这样的控制器方法:
public ActionResult Foo2(int uId)
{
return View();
}
现在我为此添加了一个操作链接:
@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 })
但是当我点击它时的结果是:
.../Main/Foo2?Length=8
为什么这不起作用?
我有一个这样的控制器方法:
public ActionResult Foo2(int uId)
{
return View();
}
现在我为此添加了一个操作链接:
@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 })
但是当我点击它时的结果是:
.../Main/Foo2?Length=8
为什么这不起作用?
您使用了错误的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>
希望这能澄清一点。
MVC 调用了错误的重载,因为它有几个具有相同参数计数的方法。试试这个:
@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }, null)
另请参阅此问题。
根据另一个Stackoverflow 问题,您应该尝试以下顺序:
@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }, null)