2017-09-29 38 views
0

J'ai un formulaire de contact qui est près du bas de la page, et nécessite un défilement pour arriver à; quand le formulaire est soumis, la page est rechargée, et j'ai besoin que la page se rende à une ancre, au formulaire de contact. Quand je change l'action de BeginForm, le '#' dans l'ancre est codé en '% 23' - comment j'arrête ce formulaire?MVC Razor - BeginForm avec l'action d'ancrage

J'ai besoin de ceci pour fonctionner sans Javascript.

@{ 
    using (Html.BeginForm(null, null, new { ReturnURL = "#contact" }, FormMethod.Post, new { novalidate = "novalidate" })) 
    { 
     //Fields... 

     <button type="submit">Submit</button> 
    } 
} 

Le code ci-dessus renverra le code HTML suivant, et ne passera pas à l'ancre:

<form action="/en/Home/Contact?ReturnURL=%23contact" method="post" novalidate="novalidate"> 

Alors que le code HTML suivant serait (mais je ne sais pas comment générer avec Razor) :

<form action="/en/Home/Contact?ReturnURL=#contact" method="post" novalidate="novalidate"> 

J'ai aussi essayé ce qui suit, mais le '#' est toujours encodées:

using (Html.BeginForm(null, null, new { ReturnURL = HttpUtility.HtmlDecode("#contact") }, FormMethod.Post, new { novalidate = "novalidate" })) 

using (Html.BeginForm(null, null, new { ReturnURL = HttpUtility.UrlDecode("#contact") }, FormMethod.Post, new { novalidate = "novalidate" })) 

using (Html.BeginForm(new { action = Url.Action("Index", "Home") + Html.Raw("Contact/#contact") })) 
+0

https://stackoverflow.com/questions/274586/including-an-anchor-tag-in -an-asp-net-mvc-html-actionlink t ry ceci – Danimal

Répondre

0

Il semble que l'utilisation du mot-clé « action » écrase l'action de la forme - le code suivant est une solution:

using (Html.BeginForm(null, null, FormMethod.Post, new { action = "#contact" })) 

Sur présentation, l'utilisateur sera envoyé à site.com/#contact

Pour les sites où la forme est pas sur l'index/home/page d'accueil, je l'ai utilisé ce qui suit pour construire une route:

using (Html.BeginForm(null, null, FormMethod.Post, 
    new { action = string.Format("{0}/{1}#contact", 
     ViewContext.RouteData.Values["controller"], 
     ViewContext.RouteData.Values["action"]) 
    }))