321 votes

Pourquoi Html.ActionLink rend-il "?Length=4" ?

Je suis TRÈS confus quant à la raison pour laquelle ce code

Html.ActionLink("About", "About", "Home", new { hidefocus = "hidefocus" })

résultats dans ce lien :

<a hidefocus="hidefocus" href="stackoverflow.com/Home/About?Length=4">About</a>

El hidefocus est ce que je cherchais à atteindre, mais où se trouve la partie ?Length=4 proviennent-ils ?

4 votes

Ce comportement apparaît également avec les méthodes Html.BeginForm().

3voto

Fil Points 29

Il suffit de supprimer "Home" (nom du contrôleur) pour que le code soit le suivant :

Html.ActionLink("About", "About", new { hidefocus = "hidefocus" })

3voto

Veuillez utiliser la bonne méthode surchargée avec cinq (5) paramètres. Exemple :

@using (@Ajax.BeginForm("Register", "Account", null,
    new AjaxOptions
    {
        HttpMethod = "POST",
        OnSuccess = "OnSuccess",
        OnFailure = "OnFailure",
        OnBegin = "OnBegin",
        OnComplete = "OnComplete"
    }, new { @class = "form-login" }))

2voto

elSchick Points 11

Cela a bien fonctionné

@Html.ActionLink("Informationen", "About", "Home", new { area = "" }, new { @class = "nav-link" })

ajouté new { area = "" } .

1voto

Comme l'a souligné Jonathon Watney dans un commentaire, cela vaut également pour

Html.BeginForm()

méthodes. Dans mon cas, j'étais dans une Créer.cshtml ciblant la requête post du contrôleur correspondant + l'action Create et ayant

using (Html.BeginForm("Create")) {
  @Html.AntiForgeryToken()
  ...
}

qui ajoutait la chaîne de recherche "?Longueur=6" à l'action du formulaire lorsqu'il est rendu. Inspiré par la réponse approuvée de roryf et réalisant que la longueur de la chaîne de caractères de "Create" est de 6, j'ai finalement résolu ce problème en supprimant la spécification explicite de l'action :

using (Html.BeginForm()) {
      @Html.AntiForgeryToken()
      ...
    }

1voto

usefulBee Points 492

Avec les noms d'attributs :

 @Html.ActionLink(linkText: "SomeText", actionName: "SomeAction", controllerName: "SomeControllerName", routeValues: new { parameterName = parameterValue}, htmlAttributes: null)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X