如何从 Request.Form 获取所有元素值,而无需准确指定哪一个带有 .获取值( "ElementIdName" )



当前使用以下代码创建一个字符串数组(元素),该数组包含Request.Form.GetValues("ElementIdName")中的字符串值,问题是为了为了工作,我的视图中的所有下拉列表都必须具有相同的元素ID名称我不希望他们这么做,原因很明显。所以我想知道我是否有办法Request.Form中的所有字符串值,而不显式指定元素名称。理想情况下,我只想获得所有的下拉列表值,我对C#不太感兴趣,但没有某种方法可以获得所有以"开头的元素ID吗;列表"+"*&";,所以我可以将我的列表命名为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);
}
         

您可以获取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]));
    }
}

Waqas Raja的答案与一些LINQ lambda乐趣:

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

这里有一种不向表单元素添加ID的方法。

<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");
}

然后id将包含从选择列表中选择的所有选项值。此外,你可以走模型绑定器的路线,如下所示:

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

希望这能有所帮助。

Request.Form是一个NameValueCollection。在NameValueCollection中,您可以找到GetAllValues()方法。

顺便说一句,LINQ方法也起作用。

相关内容

最新更新