2017-06-22 1 views
0

J'ai des problèmes avec les aides de formulaire sur mon projet .net Core MVC. J'ai la forme suivante:Les aides de formulaire Asp ne créent pas la route correctement

MyForm.cshtml

<div id="myDiv" class="row">  
<br /> 
<form asp-controller="testing" asp-action="MyForm" asp-route-returnUrl="returnHome"> 
    <input type="text" asp-for="Name" name="Name" /> 
    <button type="submit">Submit</button> 
</form> 

et mes actions dans TestingController.cs

[HttpGet, Route("testing/MyForm/{code}")] 
public IActionResult MyForm(string code) 
{ 
    return View(); 
} 
[HttpPost] 
public IActionResult MyForm(FormVM request) 
{ 
    // do stuff 
    // return some view 
    return View(); 
} 

L'idée ici est que les terres de l'utilisateur sur la page MonFormulaire avec une sorte de code (généralement un GUID mais d'autres chaînes sont possibles). Ensuite, ils remplissent le formulaire et le soumettent. Le problème que j'ai est que les aides pour le formulaire ne construisent pas l'action du formulaire correctement (ou du moins pas la façon dont il devrait être ici https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms).

Si j'utilise le code ci-dessus et que j'inspecte le code html, l'action du formulaire sera "testing/MyForm/asdf? ReturnUrl = returnHome" (le code utilisé était "asdf").

J'obtiens le même résultat que j'inclue ou non la pièce asp-controller.

Si je <form asp-route="MyForm"> alors l'action de la forme restera vide, <form action method="post">

Ce que je besoin est d'agir comme « test/MonFormulaire? ReturnUrl = returnHome » mais la valeur de mon {code} conserve rampant . Est ce que quelqu'un sait comment accomplir cela?

Merci!

Répondre

0

Je trouve la réponse ici: https://github.com/aspnet/Mvc/issues/6420

Je ne l'aime pas, mais la réponse est de tuer délibérément la variable en question. Dans mon cas ici, en utilisant

<form asp-controller="testing" asp-action="MyForm" asp-route-code="" 
              asp-route-returnUrl="returnHome"> 

fait l'affaire.