2013-05-29 51 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)