web-dev-qa-db-fra.com

Ajout de paramètre supplémentaire à la soumission de formulaire

J'ai une déclaration de formulaire dans ma vue Razor

<form method="post" action="/Lot/LotList?auctionEventId=@auctionEventId" id="filterForm">

(Incidemment, j'ai choisi de l'écrire comme ceci plutôt que d'utiliser Html.BeginFrom parce que je devais lui donner un identifiant et je ne savais pas comment faire cela avec Html.BeginFrom - mais ce n'est pas le problème ici)

En dehors de ce formulaire, j'ai un bouton qui envoie ce formulaire (il y a aussi un bouton de soumission dans le formulaire)

<input type="button" onclick="$('#filterForm').submit();" value="Show all" />

Maintenant, le problème est que si ce bouton est utilisé pour soumettre le formulaire, je souhaite que l'action du formulaire devienne 

action="/Lot/LotList?auctionEventId=@auctionEventId&showAll=true"

Comment modifier l'action et transmettre ce paramètre supplémentaire? Y a-t-il une meilleure façon de faire tout cela?

18
Sachin Kainth

Ajouter des paramètres de chaîne de requête à l'action de formulaire et tenter de le modifier au moment de l'exécution est délicat (mais pas impossible). Il est beaucoup plus facile d'utiliser des champs cachés:

<form method="post" action="/Lot/LotList" id="filterForm">
  <input type="hidden" name="auctionEventId" value="@auctionEventId" />
  ...

Alors maintenant, il ne vous reste plus qu'à ajouter un autre champ caché pour "showAll"

<form method="post" action="/Lot/LotList" id="filterForm">
  <input type="hidden" name="auctionEventId" value="@auctionEventId" />
  <input type="hidden" name="showAll" value="false" id="showAllField" />
  ...

Et connectez simplement un événement jQuery sur votre bouton showAll:

<input id="showAllButton" type="button"/>

jQuery:

$('#showAllButton').click(function(){
     $('#showAllField').val("true");
     $('#filterForm').submit();
});
34
Jamiec

que diriez-vous de mettre une entrée cachée

<form method="post" action="/Lot/LotList?auctionEventId=@auctionEventId" id="filterForm">

<input type="hidden" id="showAll" name="showAll" value=""/>

sur ton bouton

<input type="button" onclick="submitForm()" value="Show all" />

sur votre script quelque part

function submitForm(){
$('#showAll').val('true');
$('#filterForm').submit();

}
5
Albert Oclarit

Je sais que vous avez dit que ce n’était pas le problème, mais vous pouvez ajouter des attributs à Html.BeginForm comme ceci:

 @using (Html.BeginForm("ActionName","ControllerName", FormMethod.Post, new { id = "filterform" })){
5
yardpenalty

Si vous êtes dans un formulaire, vous pouvez ajouter la route à un élément de bouton. Vous pouvez remplacer l'action native du formulaire à l'aide de formAction et de formMethod. Vous pouvez également avoir plusieurs boutons avec d’autres formActions et formMethods.

<form action="/somewhere" method="get">
    <input type="type" name="name" value=" " />


    <button formaction="/Lot/LotList?auctionEventId=@auctionEventId&showAll=true" formmethod="post">Show All</button>
</form>

3
Brandon

Bonjour, j'ai trouvé que cela fonctionnait très bien

 @using (Html.BeginForm("ActionName","ControllerName",  new { id = "filterform" },FormMethod.Post)){

J'étais fatigué de faire le 'FormMethod.Post' avant le param mais cela n'a pas fonctionné et n'a jamais dépassé la valeur. Ce n’est que par essais et erreurs que j’ai réussi à le résoudre et compris que cela devait ressembler au code que j’avais posté.

J'espère que cela pourra aider

0
Matthias McCarthy