J'ai le lien ci-dessous sur une page de rasoir:
@Html.ActionLink("Create New Profile", "Create", "Profile", new { @class="toplink" })
Il apparaît dans la page source de vue comme indiqué ci-dessous:
<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a>
Lorsque je clique sur le lien, l'URL est comme ceci:
http://localhost:54876/admin/profile/create?length=7
Je ne veux pas ?length=7
. Pourquoi est-ce généré automatiquement?
La substitution ActionLink
que vous utilisez correspond à la substitution (chaîne linkText, chaîne actionName, Object routeValues, Object htmlAttributes) . Ainsi, votre valeur "Profile" est passée au paramètre routeValues
. Le comportement de cette fonction par rapport à ce paramètre est de prendre toutes les propriétés publiques dessus et de l'ajouter à la liste des valeurs de route utilisées pour générer le lien. Puisqu'un String n'a qu'une seule propriété publique (Length), vous vous retrouvez avec "length = 7".
La surcharge correcte que vous souhaitez utiliser est le (string linkText, string actionName, string controllerName, Object routeValues, Object htmlAttributes) et vous l'appelez loke ainsi:
@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 choisit lorsque vous laissez le dernier paramètre (htmlattributes
est celui ajouté), mais cela le corrigera. Un de ces jours, je vais enquêter et découvrir exactement ce qui se passe.
Une autre chose à noter, puisque vous définissez le contrôleur dans le @ActionLink
, ce que vous n'aurez peut-être pas besoin de faire, par exemple, la vue que votre "Créer un nouveau profil" @ActionLink
est exprimé en "/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
comme @ActionLink
est déjà relatif à ProfileController
, donc votre @ActionLink
pourrait ê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 pas la chose la plus simple qui soit.