2017-07-14 8 views
0

フロントエンドに複数のドロップダウンがあります。 (動的に作成されているので、どれくらいの数があるか分からず、IDで呼び出すことができません。問題は選択ドロップダウンのすべての値をチェックするループを作ることです。動的に構築されたドロップダウンをループしてASP.NETで値を取得する方法

生成されたHTML:HTMLが生成される方法の

<div id=panel1" runat="server"> 
    <div class="border" runat="server"> 
    <select name="test1" id="test1" > 
     <option value="0">Option 1</option> 
     <option value="1">Option 2</option> 
    </select> 
    </div> 
    <div class="border" runat="server"> 
    <select name="test2" id="test2" > 
     <option value="0">Option 1</option> 
     <option value="1">Option 2</option> 
    </select> 
    </div> 
</div> 

ASPXコード:

Dim div71 As New Panel 
div71.CssClass = "border" 
Dim ddl As New DropDownList 
ddl.ID = "select" & panel & "_" & counter 
ddl.Items.Clear() 
ddl.Items.Add(New ListItem("Select something", "0")) 
ddl.CssClass = "colegas" 
div71.Controls.Add(ddl) 
Dim br As New HtmlGenericControl("br") 
div71.Controls.Add(br) 
Dim emailinput As New TextBox 
emailinput.ID = "emailinput" & panel & "_" & counter 
emailinput.CssClass = "form_txt2" 
emailinput.Attributes.Add("PlaceHolder", "E-mail") 
emailinput.Style.Add("margin-bottom", "8px") 
emailinput.Style.Add("display", "none") 
div71.Controls.Add(emailinput) 
Dim hidder As New HiddenField 
hidder.ID = "hidder" & panel & "_" & counter 
div71.Controls.Add(hidder) 
Panel1.Controls.Add(div71) 

私はこのような何かを考えていますが、正確に動作します何のまわりで私の頭を取得することはできません

これら以来
+0

このASP.NETであり、あなたは、サーバー上でそれをやってみたいですか? –

+0

はい、そうです。 –

+0

DropDownListsを使用しない理由は何ですか?それとも、生成されたhtmlですか?その後、あなたのaspxを表示 –

答えて

0

あなたは、このコードを再帰的にすべてを見つけることができますDropDownLists、次のとおりです。

Dim allDropDownLists = New List(Of DropDownList)() 
Dim controlQueue = New Queue(Of Control)() 
controlQueue.Enqueue(Panel1) 

While controlQueue.Count > 0 
    ' traverse all children to find all DropDownLists 
    Dim current As Control = controlQueue.Dequeue() 
    For Each child As Control In current.Controls 
     controlQueue.Enqueue(child) 
    Next 

    Dim ddl = TryCast(current, DropDownList) 
    If ddl IsNot Nothing Then ' additional filters here 
     allDropDownLists.Add(ddl) 
    End If 
End While 

今、あなたはループこのリストをすることができますし、やりたい:もちろん

For Each ddl In allDropDownLists 
    If ddl.SelectedValue ="0" Then 
    'do something 
    Else 
    'do something else 
    Endif 
Next 

あなたもそれを行うことができリストに追加することなく既にWhile -loopに入っています。

+0

DropdownListのように、すべてのTextbox(emailinput Textboxes)をリストに入れたい場合。それをどうすれば実現できますか? –

+0

@ManuelvandenNotelaer: 'DropDownList'のすべての出来事を' TextBox'で置き換えますか? –

+0

ええ、それは何となく思ったことですが、何とか空リストを返すのです。 –

0

私はdivタグを取り除き、aspパネルとドロップダウンリストコントロールを使用しました。このコードは、動的に生成されたドロップダウンリストコントロールをループするために役立ちました。お役に立てれば。

<asp:panel id="panel1" runat="server"> 
<asp:DropDownList id="test1" runat="server"> 
<asp:ListItem Value="White"> White </asp:ListItem> 
<asp:ListItem Value="red"> red </asp:ListItem> 
</asp:DropDownList> 
<asp:DropDownList id="test2" runat="server"> 
<asp:ListItem Value="White"> White </asp:ListItem> 
<asp:ListItem Value="red"> red </asp:ListItem> 
</asp:DropDownList>  
</asp:panel> 

Vb.Netコード:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
For Each sel As System.Web.UI.WebControls.DropDownList In 
panel1.Controls.OfType(Of System.Web.UI.WebControls.DropDownList) 
     If TypeOf sel Is System.Web.UI.WebControls.DropDownList Then 
      MsgBox("The control is a button.") 
     End If 
    Next 
End Sub 
関連する問題