ASP.NET MVC übergibt eine ID in einem ActionLink an den Controller

98

Ich kann nicht sehen, wie ich eine ID abrufe, die ich in einem HTML-Code sende. ActionLink in meinem Controller. Hier ist, was ich versuche zu tun

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


    public ActionResult Modify(string ID)
    {

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

Das ist, was ein Tutorial empfohlen hat, aber es funktioniert nicht, es setzt auch? Länge = 5 am Ende der URL!

Danke im Voraus!

Bearbeiten: Hier ist die Route, die ich benutze, es ist Standard

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

Es scheint, dass jemand die beiden folgenden Vorschläge abgelehnt, aber seine Lösung nicht veröffentlicht hat!

Tablette
quelle

Antworten:

203

Sieht nicht so aus, als würden Sie die richtige Überladung von ActionLink verwenden. Versuche dies:-

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

Dies setzt voraus, dass sich Ihre Ansicht im Ordner / Views / Villa befindet. Wenn nicht, dann vermute ich, dass Sie: -

<%=Html.ActionLink("Modify Villa", "Modify", "Villa", new {id = "1"}, null)%>
AnthonyWJones
quelle
4
Guter Aufruf - Das Problem war, dass bei der ersten Überladung dieser Funktion "HtmlAttributes" als vierter Parameter verwendet wurde. Das Hinzufügen von ", null" zwang den Compiler daher, Ihr Inline-Objekt als Routenparameter zu verwenden.
Timothy Khouri
26

In MVC 4 können Sie eine Verknüpfung von einer Ansicht zu einem anderen Controller herstellen, indem Sie die ID oder den Primärschlüssel über übergeben

@Html.ActionLink("Select", "Create", "StudentApplication", new { id=item.PersonId }, null) 
Oracular Man
quelle
12

Setzen Sie das @ nicht vor die ID

new { id = "1" }

Das Framework "übersetzt" es in? Länge, wenn der Parameter / die Route nicht übereinstimmt

Davide Vosti
quelle
5

Auf MVC 5 ist das ziemlich ähnlich

@Html.ActionLink("LinkText", "ActionName", new { id = "id" })
César León
quelle
1

Die ID funktioniert auch mit @Vorzeichen vorne, aber danach müssen wir einen Parameter hinzufügen. das istnull

aussehen wie:

@Html.ActionLink("Label Name", "Name_Of_Page_To_Redirect", "Controller", new {@id="Id_Value"}, null)
ebsom
quelle