Lien d’action du razor générant automatiquement? Longueur = 7 dans l’URL?

J’ai lien sur la page de razor ci-dessous.

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

Je vois la source de la page qui est en dessous

 Create New Profile 

Lorsque je clique sur le lien. L’URL est comme ci-dessous.

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

Je ne veux pas? Longueur = 7. Pourquoi cela est généré automatiquement

Le ActionLink remplace les correspondances au remplacement de la chaîne (linkText, ssortingng actionName, Object routeValues, Object htmlAtsortingbutes) . Donc, votre valeur “Profile” est transmise au paramètre routeValues . Le comportement de cette fonction par rapport à ce paramètre consiste à prendre toutes les propriétés publiques et à l’append à la liste des valeurs de route utilisées pour générer le lien. Comme une chaîne ne possède qu’une seule propriété publique (Length), vous obtenez “length = 7”.

La surcharge correcte que vous souhaitez utiliser est la chaîne (linkText, ssortingng actionName, ssortingng controllerName, Object routeValues, Object htmlAtsortingbutes) et vous l’appelez loke pour:

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

Je ne suis pas sûr de la cause exacte de cela, mais changez-le en:

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

Je ne sais pas quelle surcharge MVC sélectionne lorsque vous htmlatsortingbutes le dernier paramètre ( htmlatsortingbutes est le dernier), mais cela htmlatsortingbutes le problème. Un de ces jours, je vais enquêter et comprendre exactement ce qui se passe.

Une autre chose à noter, puisque vous définissez le contrôleur dans le @ActionLink , ce que vous n’avez peut-être pas besoin de faire, par exemple, l’affichage de votre “Créer un nouveau profil” @ActionLink peut être “/ admin / profile / index .cshtml “, une vue qui répertorie les profils existants, dans ce cas, vous n’avez pas besoin de définir le contrôleur dans le @ActionLink car @ActionLink est déjà relatif au ProfileController , votre @ActionLink pourrait donc être

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

J’ai utilisé null au lieu de new{} comme le fait la réponse marquée, je pense que c’est plus approprié moi-même. Les surcharges ActionLink ne sont jamais les plus simples.