Razor ActionLink autogenerating? Lunghezza = 7 in URL?
-
08-10-2019 - |
Domanda
Non ho il link in basso su una pagina rasoio:
@Html.ActionLink("Create New Profile", "Create", "Profile", new { @class="toplink" })
Appare in Thes sorgente della pagina di visualizzazione, come illustrato di seguito:
<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a>
Quando clicco sul link l'URL è simile a questo:
http://localhost:54876/admin/profile/create?length=7
Non voglio ?length=7
. Perché viene generato questo auto?
Soluzione
L'override ActionLink
che si sta utilizzando le partite al (string linkText, string ActionName, routeValues ??Object, oggetto htmlAttributes) Azionamento . Quindi, il tuo valore "profilo" viene passato al parametro routeValues
. Il comportamento di questa funzione rispetto a questo parametro è quello di prendere tutte le proprietà pubbliche su di esso e aggiungerlo alla lista di valori di routing usati per generare il collegamento. Dal momento che una stringa ha una sola proprietà pubblica (lunghezza) si finisce con "Lunghezza = 7".
e la correttezza di sovraccarico che si desidera utilizzare è la (stringa linkText, ActionName string, string NomeControllore, routeValues ??Object, oggetto htmlAttributes) e lo chiamate Loke modo:
@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"})
Altri suggerimenti
Non sono sicuro che la causa esatta di questa, ma modificarla in:
@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" })
Non so che sovraccaricare MVC è in ripresa quando si esce fuori l'ultimo parametro (htmlattributes
è aggiunto uno), ma che risolvere il problema. Uno di questi giorni mi indagare e capire esattamente cosa sta succedendo.
Un'altra cosa da notare, dal momento che si sta definendo il controller nella @ActionLink
, che non potrebbe essere necessario fare, per esempio, l'idea che il vostro "Crea nuovo profilo" @ActionLink
è espresso in potrebbe essere "/ admin / profile / index.cshtml", una visione che le liste profili esistenti, in questo caso, non è necessario per definire il controller nella @ActionLink
come il @ActionLink
è già relativamente al ProfileController
, così il vostro @ActionLink
potrebbe essere
@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" })
ho usato null
anziché new{}
come la risposta marcata fa, penso che questo sia più appropriato me stesso. sovraccarichi ActionLink non sono la cosa più semplice mai.