为什么我的ActionLink不起作用

本文关键字:不起作用 ActionLink 我的 为什么 | 更新日期: 2023-09-27 18:15:46

我有一个类似的控制器方法:

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

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

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

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

.../Main/Foo2?Length=8

为什么这不起作用?

为什么我的ActionLink不起作用

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

另请参阅此问题。

根据另一个堆栈溢出问题,您应该尝试以下顺序:

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