2011-05-28 10 views
15

la actualidad con el siguiente código para crear una matriz de cadenas (elementos) que contiene todos los valores de cadena de Request.Form .GetValues ​​("ElementIdName"), el problema es que para que funcione todas mis listas desplegables en mi vista deben tener el mismo nombre de ID de elemento que no las quiero por razones obvias. Así que me pregunto si hay alguna manera de obtener todos los valores de cadena de Request.Form sin especificar explícitamente el nombre del elemento. Idealmente, me gustaría obtener todos los valores de la lista desplegable, no estoy demasiado caliente en C#, pero ¿no hay alguna forma de obtener todas las ID de elementos comenzando con decir "Lista" + "**", así podría nombrar mis listas Lista1 , Lista2, etc. List3¿Cómo puedo obtener todos los valores de los elementos de Request.Form sin especificar exactamente cuál con .GetValues ​​("") ElementIdName

Gracias ..

  [HttpPost] 

    public ActionResult OrderProcessor() 
    { 

     string[] elements; 
     elements = Request.Form.GetValues("List"); 

     int[] pidarray = new int[elements.Length]; 

     //Convert all string 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<int> pidlist = new List<int>(); 
     //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); 

Respuesta

23

puede obtener todas las claves del Request.Form y luego comparar y obtener los valores deseados.

Su cuerpo del método se verá así: -

List<int> listValues = new List<int>(); 
foreach (string key in Request.Form.AllKeys) 
{ 
    if (key.StartsWith("List")) 
    { 
     listValues.Add(Convert.ToInt32(Request.Form[key])); 
    } 
} 
+1

excelente solución. Gracias. –

7

Aquí es una manera de hacerlo sin añadir un ID de los elementos del formulario.

<form method="post"> 
    ... 
    <select name="List"> 
     <option value="1">Test1</option> 
     <option value="2">Test2</option> 
    </select> 
    <select name="List"> 
     <option value="3">Test3</option> 
     <option value="4">Test4</option> 
    </select> 
    ... 
</form> 

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

Entonces ids contendrán todos los valores de las opciones seleccionadas de las listas de selección. Además, puede ir por la ruta del modelo Binder de la siguiente manera:

public class OrderModel 
{ 
    public string[] List { get; set; } 
} 

public ActionResult OrderProcessor(OrderModel model) 
{ 
    string[] ids = model.List; 
} 

Espero que esto ayude. La respuesta de

+1

GetValues ​​era exactamente lo que necesitaba –

10

Waqas Raja con un poco de diversión lambda LINQ:

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

Request.Form es un NameValueCollection. En NameValueCollection puedes encontrar el método GetAllValues ​​().

Por cierto, el método LINQ también funciona.

Cuestiones relacionadas