2013-05-29 49 views
7

我有这样一个控制器方法:为什么我的ActionLink不起作用?

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

现在我加了一个动作连结此:

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

但这样的结果,当我点击它:

.../Main/Foo2?Length=8 

为什么这不起作用?

回答

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> 

希望这会清除它一点。

+0

这是工作,谢谢 – gurehbgui

+0

@gurehbgui不客气。 –

5

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

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

另请参见this question

+0

在那里,我得到:。... /主/ foo2的,但UID是缺少:( – gurehbgui

+0

@gurehbgui看到编辑'null'应被传递给最后一个参数'htmlAttributes'。 – CodeCaster

+0

现在它的工作,谢谢 – gurehbgui

0

根据另一Stackoverflow Question你应该试试这个命令:

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