web-dev-qa-db-ja.com

.GetValues( "ElementIdName")でどの要素を正確に指定せずに、Request.Formからすべての要素値を取得できますか。

現在、以下のコードを使用して、Request.Form.GetValues( "ElementIdName")からのすべての文字列値を含む文字列配列(要素)を作成します。問題は、これがビューのすべてのドロップダウンリストを機能するために必要なことです明らかな理由のために私がそれらにしたくない同じ要素ID名。したがって、要素名を明示的に指定せずにRequest.Formからすべての文字列値を取得する方法があるかどうか疑問に思っています。理想的には、すべてのドロップダウンリストの値のみを取得したいと思います。C#であまり暑くはありませんが、「List」+「**」で始まるすべての要素IDを取得する方法はありません。 、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);
22
LaserBeak

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]));
    }
}
37
Waqas Raja

いくつかのLINQラムダファンによるWaqas Rajaの答え:

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

フォーム要素に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;
}

お役に立てれば。

8
aligray