Razor actionlink autogenerating? Length = 7 in URL?

Ho Link sulla pagina del razor qui sotto.

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

Vedo la sorgente vista pagina che è sotto

 Create New Profile 

Quando clicco sul link. L’URL è come sotto.

 http://localhost:54876https://stackoverflow.com/admin/profile/create?length=7 

Non voglio? Lunghezza = 7. Perché questo è generato automaticamente.

L’override di ActionLink sta utilizzando le corrispondenze per (override stringa linkText, stringa actionName, Object routeValues, Object htmlAttributes) . Quindi il tuo valore “Profilo” viene passato al parametro routeValues . Il comportamento di questa funzione rispetto a questo parametro è di prendere tutte le proprietà pubbliche su di esso e aggiungerlo all’elenco dei valori di route utilizzati per generare il collegamento. Dal momento che una stringa ha solo una proprietà pubblica (Lunghezza) si finisce con “lunghezza = 7”.

L’overload corretto che si desidera utilizzare è (stringa linkText, string actionName, string controllerName, Object routeValues, Object htmlAttributes) e lo si chiama loke così:

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

Non sono sicuro della causa esatta di ciò, ma lo cambio in:

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

Non so quale sovraccarico MVC stia selezionando quando si abbandona l’ultimo parametro ( htmlattributes è quello aggiunto), ma questo lo risolverà. Uno di questi giorni indagherò e capirò esattamente cosa sta succedendo.

Un’altra cosa da notare, poiché si sta definendo il controller in @ActionLink , che potrebbe non essere necessario, ad esempio, la vista in cui è express il tuo “Crea nuovo profilo” @ActionLink potrebbe essere “/ admin / profile / index .cshtml “, una vista che elenca i profili esistenti, in questo caso, non è necessario definire il controller in @ActionLink poiché @ActionLink è già relativo a ProfileController , quindi il tuo @ActionLink potrebbe essere

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

Ho usato null invece di new{} come fa la risposta marcata, penso che sia più appropriato per me. I sovraccarichi di ActionLink non sono la cosa più semplice di sempre.