53

Ich habe Link auf Rasierklinge Seite unten.Razor Actionlink automatische Generierung? Länge = 7 in URL?

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

Ich sehe Seitenansicht Quelle, die unter

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

ist, wenn ich auf den Link klicken. Die URL ist wie folgt.

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

Ich will nicht? Länge = 7. Warum wird das automatisch generiert?

+0

es muss etwas sein, mit Ihren Routen zu tun. Standardmäßig sollte dieser 'ActionLink' eine href von'/Profile/Create' erzeugen. Wobei "Profil" das Controller-Argument und "Create" das Argument der Aktionsmethode ist. Die Tatsache, dass "/ admin" in die href-Datei eingefügt wird, hebt dieses Problem hervor. Kannst du deine Routen zeigen? – RPM1984

Antwort

85

Die ActionLink überschreiben Sie Übereinstimmungen mit der (string linkText, string actionName, Object routeValues, Object htmlAttributes) Überschreibung verwenden. Ihr "Profil" -Wert wird also an den Parameter routeValues übergeben. Das Verhalten dieser Funktion in Bezug auf diesen Parameter besteht darin, alle öffentlichen Eigenschaften zu übernehmen und sie der Liste der Routenwerte hinzuzufügen, die zum Generieren der Verknüpfung verwendet werden. Da ein String nur eine öffentliche Eigenschaft (Länge) hat, endet die Länge mit "7".

Die richtige Überlastung Sie verwenden möchten, ist die (string linkText, string actionName, string controllerName, Object routeValues, Object htmlAttributes) und Sie nennen es loke so:

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

Kannst du für mich klären ... Mit dieser Struktur wird mein Link als '~/Account/Manage /' generiert ... Ich musste den leeren 'neuen {}' nach meinem Parameter setzen, aber jetzt wird er als '~ generiert/Konto/Verwaltung/user = ortund' während ich '~/Konto wollen/verwalten/ortund' ... ich kann nicht dorthin zu kommen scheinen und verstehen nicht, warum – Ortund

+0

Komisch, dass die offiziellen MVC bolierplate mißbraucht ist diese Überlastung Standardmäßig bei der Erstellung eines "Passwort vergessen" -Links. Musste es geändert haben. –

7

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

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

Ich weiß nicht, was MVC Überlastung Kommissionierung, wenn Sie den letzten Parameter (htmlattributes wegzulassen ist der addierte ein), aber das wird es beheben. Eines Tages werde ich nachforschen und genau herausfinden, was vor sich geht.

+0

Diese Art des für mich gearbeitet, aber ich habe noch mit einem bum Link am Ende ... habe ich '~/Konto/Verwaltung/user = ortund' während das, was ich brauche, ist' ~/Konto/Verwalten/ortund' – Ortund

+0

Sie können benutze einfach null. Zumindest benutze ich das immer. –

0

andere Sache zu beachten, da Sie den Controller in der @ActionLink definieren, die Sie nicht tun müssen die Ansicht, zum Beispiel, die Ihr „Neues Profil erstellen“ @ActionLink wird ausgedrückt in vielleicht „/admin/profile/index.cshtml“, eine Ansicht, die vorhandenen Profile aufgelistet, in diesem Fall, müssen Sie nicht den Controller definieren müssen in die @ActionLink als @ActionLink ist bereits in Bezug auf die ProfileController, so dass Ihre @ActionLink könnte

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

benutzte ich null statt new{} wie die deutliche Antwort der Fall ist, ich denke, das mich besser geeignet. ActionLink-Überladungen sind nicht die einfachste Sache überhaupt.

Verwandte Themen