Html.BeginForm () avec le seul ID de formulaire ne génère pas l’URL d’action correcte

Je veux seulement append le formId dans le beginForm()

Si j’essaye d’utiliser
Html.BeginForm(null, null, FormMethod.Post, new {@id="Id"})

alors le HTML généré est

Je ne sais pas comment cette url d’action est générée, alors j’ai essayé,
Html.BeginForm(new {@id="Id"})
mais alors l’URL d’action ressemble à ceci

Dans les deux cas, l’URL d’action n’est pas ce qu’elle devrait être et ne frappe pas l’action post du contrôleur.

Lorsque vous essayez de générer un itinéraire, comme avec BeginForm , MVC fera de son mieux pour inclure les éléments dont vous pourriez avoir besoin.

Si vous êtes sur domain.com/Home/Index/b9f88f80-f31f-4144-9066-55384c9f1cfc et que vous utilisez le code que vous avez fourni, le formulaire sera généré avec les valeurs d’action, de contrôleur et de route à mesure qu’il les trouve.

 controller / action / id /Home / Index / b9f88f80-f31f-4144-9066-55384c9f1cfc 

Une façon de contourner ce problème est de forcer id à ne rien être (comme une chaîne vide).

Observer:

 @using (Html.BeginForm(null, null, new { @id = ssortingng.Empty }, FormMethod.Post, new { @id = "Id" })) { } 

Le new { @id = ssortingng.Empty } est un object anonyme qui représente les valeurs de la route.

Changez @id en id.

  @using (Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "MyForm1" })) {  } 

En raison de System.Web.Mvc.Html (dans System.Web.Mvc.dll ), le formulaire de début est défini comme suit: –

BeginForm (ce HtmlHelper htmlHelper, chaîne actionName, chaîne
controllerName, object routeValues, méthode FormMethod, object htmlAtsortingbutes)

Signifie comme ceci: Html.BeginForm (chaîne actionName, chaîne controllerName, object routeValues, méthode FormMethod, object htmlAtsortingbutes)

Donc, cela a fonctionné pour moi dans MVC 4

 @using (Html.BeginForm(null, null, new { @id = ssortingng.Empty }, FormMethod.Post, new { @id = "trainingForm" })) {   }