2013-05-29 18 views
7

Mam metodę Controller tak:Dlaczego mój ActionLink nie działa?

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

teraz dodałem link działania w tym:

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

ale wynik gdy klikam to:

.../Main/Foo2?Length=8 

Dlaczego to nie działa?

Odpowiedz

5

Używasz niewłaściwego przeciążenia metody ActionLink. należy używać:

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

To przeciążenie zinterpretuje new { uId = 12 } być używane jako wartości trasy, a nie jako atrybutów HTML. Przeciążenie, z którego korzystasz, polega na interpretacjijako obiektu z atrybutami TML łącza akcji. Wywołując powyższe przeciążenie, jako parametr piąty podajemy null, który będzie teraz używany dla atrybutów HTML i obiektu jako wartości trasy.

Możemy łatwo zobaczyć, co się dzieje, patrząc na to, co dostaje renderowane:

@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> 

Nadzieja to ściąga go trochę.

+0

to działa, dziękuję – gurehbgui

+0

@gurehbgui Nie ma za co. –

5

MVC wywołuje nieprawidłowe przeciążenie, ponieważ ma kilka metod z tą samą liczbą parametrów. Wypróbuj to:

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

Zobacz także this question.

+0

Nie mogę. .../main/foo2 ale UID brakuje :( – gurehbgui

+0

@gurehbgui zobaczyć edytować 'null' powinien być przekazanym dla ostatniego parametru, 'htmlAttributes'. – CodeCaster

+0

teraz działa, dziękuję – gurehbgui

0

Według Innym Stackoverflow Question należy spróbować następującej kolejności:

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