0
リピータでダイナミックフォームを作成しました。フォームを送信した後、私のダイナミックコントロールはどこにありますか?
<asp:repeater ID="fieldRepeater" OnItemDataBound="dataBound" runat="server">
<itemtemplate>
<div id="controlRow" class="row" runat="server">
<div id="testContainer" class="col-md-2" runat="server">
</div>
</div>
</itemtemplate>
</asp:repeater>
コードビハインド私はそれに表示したいフィールドを作成しました。
Protected Sub dataBound(ByVal sender As Object, e As RepeaterItemEventArgs)
dim temp as new DropDownList
dim tempLabel as new label
Dim testContainer As HtmlGenericControl = e.Item.FindControl("testContainer")
'createField
temp.ID = "testField" & e.Item.ItemIndex 'this is testField0
temp.Items.Add(New ListItem("Not Used", 0))
temp.Items.Add(New ListItem("Used", 1))
temp.CssClass = "form-control"
'createLabel
tempLabel.ID = "testFieldLabel" & e.Item.ItemIndex
tempLabel.AssociatedControlID = "testField" & e.Item.ItemIndex
tempLabel.Text = dr("controlLabel")
testContainer.Controls.Add(temp)
testContainer.Controls.Add(tempLabel)
end sub
フォームが美しく動作し、私もDBからのデータとそれを事前に取り込むことができますが、私の提出ハンドラで、私のコントロールは存在しません:
Protected Sub submit_Click(ByVal sender As Object, ByVal e As EventArgs) Handles submit.Click
Dim i As Int32 = 0
For Each r As DataRow ...
'db stuff
Dim temp As New DropDownList
temp = Me.FindControl("testField" & i.ToString)
'db stuff
i += 1
next
end sub
temp = Me.FindControl("testField" & i.ToString)
は常にnothing
であることができる人なぜ私が知るのを手助けしますか?
<div id="cntMain_fieldRepeater_testContainer_0" class="col-md-2">
<label for="cntMain_fieldRepeater_testField0_0" id="cntMain_fieldRepeater_testFieldLabel0_0" style="color:#007AFF;">Activity</label>
<select name="ctl00$cntMain$fieldRepeater$ctl00$testField0" id="cntMain_fieldRepeater_testField0_0" class="form-control">
<option value="0">Not Used</option>
<option value="1">Used</option>
</select>
</div>
私はほぼそこにいた!私は 'fieldRepeater.item(i).findControl(" testField "&i)'に助けてくれました。 – Travis
ようこそ。しかし、コントロールを 'itemtemplate'に直接置くこともできます。そうすれば、それらを動的に再作成する必要はありません。 – VDWWD
理論的にははいですが、要素がリピーターにあるため、実際には必要ありません。彼らには一意の名前とIDが割り当てられます。そして、あなたは 'Button1_Click'の中でまったく同じものにアクセスすることができます:Dim temp As DropDownList = CType(item.FindControl((" DropDownList1 "))、DropDownList)' – VDWWD