Как я могу получить все значения элементов из Request.Form, не указав точно, какой из них имеет .GetValues ( "ElementIdName" )
В настоящее время используется следующий код для создания массива строк (элементов), который содержит все
строковые значения из Request.Form.GetValues ( "ElementIdName" ), проблема в том, что для
это для работы всех моих выпадающих списков в моем представлении должно иметь одинаковое имя идентификатора элемента, которое
Я не хочу, чтобы они по понятным причинам. Поэтому мне интересно, есть ли у меня способ получить
все строковые значения из Request.Form без явного указания имени элемента. В идеале я хотел бы получить только все значения раскрывающегося списка, я не слишком горячий на С#, но не существует способа получить идентификатор элемента, начиная с "Список" + "**", поэтому я мог бы назвать список List1, List2, List3 и т.д.
Спасибо..
[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);
Ответы
Ответ 1
Вы можете получить все ключи в Request.Form, а затем сравнить и получить нужные значения.
Тело вашего метода будет выглядеть так: -
List<int> listValues = new List<int>();
foreach (string key in Request.Form.AllKeys)
{
if (key.StartsWith("List"))
{
listValues.Add(Convert.ToInt32(Request.Form[key]));
}
}
Ответ 2
Вакас Раджа ответит на какую-нибудь забавную игру ЛИНД:
List<int> listValues = new List<int>();
Request.Form.AllKeys
.Where(n => n.StartsWith("List"))
.ToList()
.ForEach(x => listValues.Add(int.Parse(Request.Form[x])));
Ответ 3
Вот способ сделать это, не добавляя идентификатор к элементам формы.
<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");
}
Затем идентификаторы будут содержать все выбранные значения параметров из списков выбора. Кроме того, вы можете спуститься по маршруту Binding Model так:
public class OrderModel
{
public string[] List { get; set; }
}
public ActionResult OrderProcessor(OrderModel model)
{
string[] ids = model.List;
}
Надеюсь, что это поможет.
Ответ 4
Request.Form - это NameValueCollection. В NameValueCollection вы можете найти метод GetAllValues ().
Кстати, метод LINQ также работает.