J'ai un formulaire rendu via Html.BeginForm(), il existe en tant que composant dans la page Master afin qu'il apparaisse sur chaque page Dans l'application. Je l'ai fait en utilisant Html.RenderAction() de l'assemblage Mvc Futures. C'est un formulaire de recherche simple qui met à jour certains éléments dans le même composant sous le formulaire de recherche lui-même, et effectue un GET pour que le terme de recherche apparaisse dans la chaîne de requête.ASP.NET MVC - Obtenir Html.BeginForm() pour se rappeler des paramètres Querystring lors de la soumission via GET
<div class="sideBarContent">
<h2>Search Products</h2>
<% using (Html.BeginForm(ViewContext.RouteData.Values["action"].ToString(),
ViewContext.RouteData.Values["controller"].ToString(), FormMethod.Get)) { %>
<fieldset>
<legend>Search Products</legend>
<div class="formRow">
<label for="ProductsSearch">Search</label>
<%= Html.TextBox("ProductsSearch") %>
</div>
<input type="submit" value="Search" class="button" />
</fieldset>
<% } %>
<ul>
// Products will eventually be listed here
</ul>
</div>
J'ai besoin ce formulaire pour faire ce qui suit:.
1) Il doit effectuer une requête GET à ce que la page actuelle, il est sur annexant « ProduitsRecherche » en tant que paramètre querystring (par exemple example.com/ ? ProduitsRecherche = test ou example.com/books/fiction?ProductsSearch=test)
2) Il ne faut pas oublier tous les paramètres querystring exising qui sont déjà dans le querystring, les maintenant après avoir cliqué sur le bouton Rechercher par exemple. example.com/myOrders?page=2 après la recherche cliquez devrait aller à example.com/myOrders?page=2 & ProduitsRecherche = test)
Je peux l'obtenir pour faire 1) mais ne peut pas travailler 2). Je suppose que normalement pour un de à GET et en ajoutant des paramètres querystring il doit avoir des champs de formulaire cachés, donc je pourrais écrire une fonction utilitaire qui ajoute automatiquement un tas de champs de formulaire cachés pour toutes les valeurs de chaîne de requête, mais je voulais vérifiez qu'il n'y a pas eu d'approche plus facile, ou peut-être que je m'y prends mal.
À la votre!
Vous pouvez également rendre cela plus réutilisable en faisant en sorte que la clé ProductSearch vérifie un paramètre. Vous pouvez aussi linq-ify, par exemple QueryString.AllKeys.Where (x =>! X.StartsWith ("ProductSearch")) –
True. Et vous pouvez vous débarrasser de toute la boucle foreach() ... HttpContext.Current.Request.QueryString.AllKeys.Where (k =>! K.StartsWith (sauf)). ToList(). ForEach (k => sb. Append (helper.Hidden (k, HttpContext.Current.Request.QueryString [k]))); :) –
@JamesS merci - Je ne sais pas si les choses sont toujours les mêmes depuis que vous avez posté ceci, mais j'essayais toutes sortes de choses pour que cela fonctionne, mais j'ai opté pour une approche de terrain caché selon votre réponse ci-dessus – Haroon