Frage

Ich habe den Link unten auf einer Rasierklinge Seite:

@Html.ActionLink("Create New Profile", "Create", "Profile", new { @class="toplink" })

Es erscheint in thes Quelle Ansicht Seite, wie unten dargestellt:

<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a>

Wenn ich auf den Link klicken ist die URL wie folgt aus:

http://localhost:54876/admin/profile/create?length=7

Ich will nicht ?length=7. Warum wird diese automatisch generiert?

War es hilfreich?

Lösung

Die ActionLink überschreiben Sie verwenden Einstimmungen mit dem (string linktext, string action, Objekt Routevalues, Objekt Htmlattributes) außer Kraft setzen. Also Ihr „Profil“ Wert wird den routeValues Parameter übergeben. Das Verhalten dieser Funktion in Bezug auf diesen Parameter ist es, alle öffentlichen Eigenschaften auf, es zu nehmen und es auf die Liste der Routenwerte hinzufügen verwendet, um die Verbindung zu erzeugen. Da nur ein String ein öffentliches Eigentum (Länge) hat Sie am Ende mit „Länge = 7“.

Die richtige Überlastung Sie verwenden möchten, ist die (string linktext, string action, string controller, Objekt Routevalues, Objekt Htmlattributes) und Sie nennen es loke so:

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"})

Andere Tipps

Ich bin mir nicht sicher, dass die genaue Ursache für diese, aber ändern Sie es an:

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" })

Ich weiß nicht, was überlastete MVC Kommissionierung, wenn Sie den letzten Parameter weglassen (htmlattributes ist die Mehr eins), aber das wird es beheben. Eines Tages werde ich untersuchen und herauszufinden, genau, was los ist.

Eine andere Sache zu beachten, da Sie den Controller in der @ActionLink definieren, die Sie nicht brauchen zu tun, zum Beispiel die Ansicht, dass Ihr „Neues Profil erstellen“ @ActionLink ausgedrückt in sein könnte „/ admin / profile / index.cshtml“, eine Ansicht, die Listen Profile existieren, in diesem Fall, dass Sie nicht den Controller in den @ActionLink definieren müssen, wie die @ActionLink zum ProfileController bereits relativ sind, so Ihr @ActionLink

sein könnte
@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" })

habe ich null statt new{} als die markierte Antwort der Fall ist, ich denke, das ist mir besser geeignet. Action Überlastungen sind nicht die einfachste Sache überhaupt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top