ASP.NET MVC przekazuje identyfikator w ActionLink do kontrolera

99

Nie widzę możliwości odzyskania identyfikatora, który wysyłam w html.ActionLink w moim kontrolerze, oto co próbuję zrobić

<li>
    <%= Html.ActionLink("Modify Villa", "Modify", "Villa", new { @id = "1" })%></li>


    public ActionResult Modify(string ID)
    {

        ViewData["Title"] =ID;
        return View();
    }

To właśnie zalecał samouczek, który śledziłem, ale nie działa, ale umieszcza również? Długość = 5 na końcu adresu URL!

Z góry dziękuję!

edycja: tutaj jest trasa, której używam, jest domyślna

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

Wygląda na to, że ktoś odrzucił dwie poniższe sugestie, ale nie opublikował ich rozwiązania!

Tablet
źródło

Odpowiedzi:

204

Wygląda na to, że nie używasz prawidłowego przeciążenia ActionLink. Spróbuj tego:-

<%=Html.ActionLink("Modify Villa", "Modify", new {id = "1"})%>

Zakłada się, że Twój widok znajduje się w folderze / Views / Villa. Jeśli nie, to podejrzewam, że potrzebujesz: -

<%=Html.ActionLink("Modify Villa", "Modify", "Villa", new {id = "1"}, null)%>
AnthonyWJones
źródło
5
Dobre wywołanie - problem polegał na tym, że pierwsze przeciążenie tej funkcji miało „HtmlAttributes” jako czwarty parametr. Zatem dodanie ", null" zmusiło kompilator do użycia twojego obiektu inline jako parametrów trasy.
Timothy Khouri,
27

W MVC 4 możesz łączyć się z jednego widoku do innego kontrolera, przekazując identyfikator lub klucz podstawowy za pośrednictwem

@Html.ActionLink("Select", "Create", "StudentApplication", new { id=item.PersonId }, null) 
Człowiek wyroczni
źródło
13

Nie umieszczaj @ przed id

new { id = "1" }

Framework "tłumaczy" to na? Długość, gdy występuje niezgodność w parametrze / trasie

Davide Vosti
źródło
6

Na MVC 5 jest dość podobnie

@Html.ActionLink("LinkText", "ActionName", new { id = "id" })
César León
źródło
2

Identyfikator będzie działał również ze @znakiem z przodu, ale musimy dodać jeden parametr po tym. to jestnull

wygląda jak:

@Html.ActionLink("Label Name", "Name_Of_Page_To_Redirect", "Controller", new {@id="Id_Value"}, null)
ebsom
źródło