Nehmen wir an, ich habe eine Klasse
public class ItemController:Controller
{
public ActionResult Login(int id)
{
return View("Hi", id);
}
}
Auf einer Seite, die sich nicht im Ordner "Element" befindet, auf der sich ItemController
befindet, möchte ich einen Link zur Login
Methode erstellen . Also , welche Html.ActionLink
Methode soll ich verwenden und welche Parameter sollte ich übergeben?
Insbesondere suche ich den Ersatz der Methode
Html.ActionLink(article.Title,
new { controller = "Articles", action = "Details",
id = article.ArticleID })
Dies wurde in der letzten ASP.NET MVC-Inkarnation eingestellt.
c#
.net
asp.net-mvc
html-helper
actionlink
Graviton
quelle
quelle
Antworten:
Ich denke, was Sie wollen, ist Folgendes:
ASP.NET MVC1
Dies verwendet die folgende ActionLink-Signaturmethode:
ASP.NET MVC2
Zwei Argumente wurden vertauscht
Dies verwendet die folgende ActionLink-Signaturmethode:
ASP.NET MVC3 +
Argumente befinden sich in derselben Reihenfolge wie MVC2, der ID-Wert wird jedoch nicht mehr benötigt:
Dadurch wird vermieden, dass Routing-Logik in die Verbindung hartcodiert wird.
Dies gibt Ihnen die folgende HTML-Ausgabe, vorausgesetzt:
article.Title = "Title"
article.ArticleID = 5
. .
quelle
, null
Parameter NACH Ihremnew { ... }
... benötigen, denn wenn Sie die Überladungen dieser Methode überprüfen, denken Sie, dass Ihre Parameter htmlArguments sind ... keine Argumente weiterleiten. Um die richtige Methode zu verwenden, müssen Sie die Methode verwenden, dierouteArguments, htmlArguments
.. hat . Geben Sie also für diesen letzten einfach null einhtmlArgument
. Der erste Code in dieser Antwort enthält ihn. Ich habe diesen Beitrag aktualisiert, damit Sie ihn leicht sehen können (dh er scrollt nicht).@Html.ActionLink("Text","Action","Controller", new { item.ID }, null)
Ich wollte Joseph Kingrys Antwort ergänzen . Er lieferte die Lösung, aber zuerst konnte ich sie auch nicht zum Laufen bringen und erzielte ein Ergebnis wie Adhip Gupta. Und dann wurde mir klar, dass die Route überhaupt existieren muss und die Parameter genau mit der Route übereinstimmen müssen. Also hatte ich eine ID und dann einen Textparameter für meine Route, der ebenfalls enthalten sein musste.
quelle
Vielleicht möchten Sie sich die
RouteLink()
Methode ansehen. Mit dieser Methode können Sie alles (außer dem Linktext und dem Routennamen) über ein Wörterbuch angeben.quelle
Ich denke, dass Joseph Controller und Action umgedreht hat. Zuerst kommt die Aktion, dann der Controller. Das ist etwas seltsam, aber wie die Signatur aussieht.
Nur um die Dinge zu klären, ist dies die Version, die funktioniert (Adaption von Josephs Beispiel):
quelle
was ist damit?
quelle
quelle
Wenn Sie alle ausgefallenen Hosen tragen möchten, können Sie sie folgendermaßen erweitern, um dies zu tun:
Sie müssen dies in den
System.Web.Mvc
Namespace einfügen:Dies umfasst zwei Überschreibungen für
Route Values
undHTML Attributes
außerdem müssen alle Ihre Ansichten hinzugefügt werden:@using YourProject.Controllers
oder Sie können sie zu Ihren hinzufügenweb.config <pages><namespaces>
quelle
Verwenden Sie benannte Parameter, um die Lesbarkeit zu verbessern und Verwirrungen zu vermeiden.
quelle
Mit MVC5 habe ich es so gemacht und es ist 100% funktionierender Code ....
Ihr könnt euch ein Bild davon machen ...
quelle
Dieser Typ verwendet:
@ Html.ActionLink ("MainPage", "Index", "Home")
Hauptseite: Name des Textes Index: Aktion Ansicht Startseite: HomeController
Basis Verwenden Sie ActionLink
quelle