Razor Action autogenerating? Länge = 7 in URL?
-
08-10-2019 - |
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?
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
@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.