Comment puis-je obtenir toutes les valeurs d’éléments de Request.Form sans spécifier laquelle avec .GetValues ​​(“ElementIdName”)

En utilisant actuellement le code ci-dessous pour créer un tableau de chaînes (éléments) contenant toutes les valeurs de chaîne de Request.Form.GetValues ​​(“ElementIdName”), le problème est que pour que cela fonctionne, toutes les listes déroulantes de ma vue doivent avoir le même nom d’élément que je ne souhaite pas qu’ils soient pour des raisons évidentes. Je me demande donc s’il est possible pour moi d’obtenir toutes les valeurs de chaîne de Request.Form sans spécifier explicitement le nom de l’élément. Idéalement, je voudrais obtenir uniquement toutes les valeurs des listes déroulantes, je ne suis pas trop chaud en C #, mais n’existe-t-il pas un moyen d’obtenir tous les ID d’élément commençant par “Liste” + “**”, afin de pouvoir nommer mes listes Liste1 , List2, List3 etc.

Merci..

[HttpPost] public ActionResult OrderProcessor() { ssortingng[] elements; elements = Request.Form.GetValues("List"); int[] pidarray = new int[elements.Length]; //Convert all ssortingng values in elements into int and assign to pidarray for (int x = 0; x < elements.Length; x++) { pidarray[x] = Convert.ToInt32(elements[x].ToString()); } //This is the other alternative, painful way which I don't want use. //int id1 = int.Parse(Request.Form["List1"]); //int id2 = int.Parse(Request.Form["List2"]); //List pidlist = new List(); //pidlist.Add(id1); //pidlist.Add(id2); var order = new Order(); foreach (var productId in pidarray) { var orderdetails = new OrderDetail(); orderdetails.ProductID = productId; order.OrderDetails.Add(orderdetails); order.OrderDate = DateTime.Now; } context.Orders.AddObject(order); context.SaveChanges(); return View(order); 

Vous pouvez obtenir toutes les clés dans Request.Form, puis comparer et obtenir les valeurs souhaitées.

Le corps de votre méthode ressemblera à ceci: –

 List listValues = new List(); foreach (ssortingng key in Request.Form.AllKeys) { if (key.StartsWith("List")) { listValues.Add(Convert.ToInt32(Request.Form[key])); } } 

La réponse de Waqas Raja avec l’amusement de LINQ lambda:

 List listValues = new List(); Request.Form.AllKeys .Where(n => n.StartsWith("List")) .ToList() .ForEach(x => listValues.Add(int.Parse(Request.Form[x]))); 

Voici un moyen de le faire sans append d’identifiant aux éléments de formulaire.

 
... ...
public ActionResult OrderProcessor() { ssortingng[] ids = Request.Form.GetValues("List"); }

Ensuite, les identifiants contiendront toutes les valeurs d’option sélectionnées dans les listes de sélection. En outre, vous pouvez suivre l’itinéraire Model Binder comme suit:

 public class OrderModel { public ssortingng[] List { get; set; } } public ActionResult OrderProcessor(OrderModel model) { ssortingng[] ids = model.List; } 

J’espère que cela t’aides.

Request.Form est une NameValueCollection. Dans NameValueCollection, vous pouvez trouver la méthode GetAllValues ​​().

À propos, la méthode LINQ fonctionne également.