0

これはhtmlです:

<input type="text" value="Google" name="Projects[0]" />
 <input type="text" value="Microsoft" name="Projects[1]" />
 <input type="text" value="Microsoft" name="Projects[2]" />

これには、ASPX 送信ボタンもあります。

<asp:Button ID="submitBtn" Text="Save" runat="server" OnClick="SubmitButton_Click" />

--- C# -----------

 protected void SubmitButton_Click(object sender, EventArgs e)
    {            
        List<string> projectsInCSharp = new List<string>();
        projectsInCSharp.Add(Request["Projects[0]"]); //Google
        projectsInCSharp.Add(Request["Projects[1]"]); //Microsoft

    }

これを行い、リストに自動的にバインドするより良い方法はありますか? たとえば、ASP.NET MVC ではこれを行うことができます。ただし、私は WebForms を使用しており、これだけで MVC に切り替えることはできません。

.NET 4.0、C#、ASPX を使用しています。

4

3 に答える 3

5

このコードを試してください。Addを複数回呼び出す代わりに、AddRangeを使用できます。

        List<string> projectsInCSharp = new List<string>();
        projectsInCSharp.AddRange(Request.Params
            .Cast<string>()
            .Where(o => o.StartsWith("Projects["))
            .OrderBy(o => int.Parse(o.Remove(o.Length - 1, 1).Remove(0, 9)))
            .Select(o => Request.Params[o])
            );

または、コンストラクターに入れることもできます。

        List<string> projectsInCSharp = new List<string>(
            Request.Params
                .Cast<string>()
                .Where(o => o.StartsWith("Projects["))
                .OrderBy(o => int.Parse(o.Remove(o.Length - 1, 1).Remove(0, 9)))
                .Select(o => Request.Params[o])
            );
于 2012-08-08T11:20:10.127 に答える
5

nameこれはハックな回避策ですが、ブラウザーが同じ属性を持つ投稿フィールドをカンマで区切るという事実を利用することができます。

つまり、aspx を次のように変更します。

<input type="text" value="Google" name="Project" />
<input type="text" value="Microsoft" name="Project" />
<input type="text" value="Oracle" name="Project" />

その後、コード ビハインドでワンライナーを実行できます。

List<string> projectsInCSharp = Request["Project"].Split(',').ToList();
于 2012-08-08T11:17:37.163 に答える
0

私の提案は、入力テキストボックスとともに、非表示フィールドにカウントも渡すことです

<input type="hidden" name="textBoxCount" value="10" /> //you will need to pass it

TextBoxes のカウントがわかっていれば

protected void SubmitButton_Click(object sender, EventArgs e)
{  
   List<string> projectsInCSharp = new List<string>();
   int count = Convert.ToInt32(Request["textBoxCount"]);
   for(int i = 1; i <= count; i++)
   {
      if(Request["Projects[" +  i + "]"] != null)
      { 
        projectsInCSharp.Add(Request["Projects[" +  i + "]"]);
      }
  }
}
于 2012-08-08T11:19:45.467 に答える