获取动态复选框的值
get values of dynamic checkboxes
我根据数据库中的值在 VB.Net 和 .aspx 页面中动态创建复选框。为了便于对齐,我将它们放在两列 table 中。这部分工作正常。
Private Async Function InitForEditAsync() As Task
Dim docList = Await GetLoanApplicationConfigurationDocs()
Dim row = New HtmlTableRow()
Dim cell = New HtmlTableCell()
Dim i = 0
For Each doc In docList
Dim chkBox = New HtmlInputCheckBox()
Dim lbl = New Label()
Dim remainder = i Mod 2
chkBox.ID = "chkDocId" + doc.Id.ToString
lbl.Text = doc.DisplayName
cell.Controls.Add(chkBox)
cell.Controls.Add(lbl)
row.Cells.Add(cell)
cell = New HtmlTableCell()
If remainder <> 0 OrElse i = docList.Count() - 1 Then
tblEdit.Rows.Add(row)
row = New HtmlTableRow()
End If
i += 1
Next
End Function
现在我需要在不知道 ID 的情况下检索值,但我运气不好。我试过这个:
For Each chkBox As HtmlInputCheckBox In pnlEdit.Controls.OfType(Of HtmlInputCheckBox)
但控件列表中未返回复选框。 table 是,但是当我在控件集合中探索它时 table 对象中没有行,当我尝试这样做时:
For Each row As HtmlTableRow In tblEdit.Rows.OfType(Of HtmlTableRow)
如果有帮助,这里是创建的 UI 和 HTML 的片段:
如有任何建议,我们将不胜感激。提前致谢。
根据我从另一个站点获得的一些想法,我将使用 asp:CheckBoxList 重写它。显然它像数据网格一样绑定,您可以通过它进行枚举。好像是我需要的。
更新:我发布的所有内容都用五行代码解决了! “cblDocList 是我的 asp CheckboxList,而 docList 是我的可枚举的对象。
cblDocList.RepeatColumns = 2
cblDocList.DataSource = docList
cblDocList.DataTextField = "DisplayName"
cblDocList.DataValueField = "Id"
cblDocList.DataBind()
您可以通过对每一行和每个单元格进行循环或使用 Linq 来仅包含内部具有 HtmlInputCheckBox 类型控件的单元格。
我已将您的代码简化为 运行,此处还向您展示了一个示例来完成您的任务。显然,您必须根据自己的紧急情况进行更改。
希望我理解得很好:)
Dim tblEdit As New HtmlTable
For k As Integer = 0 To 10
Dim cell = New HtmlTableCell()
Dim row = New HtmlTableRow()
Dim chkBox = New HtmlInputCheckBox()
Dim lbl = New Label()
Dim remainder = k Mod 2
chkBox.ID = "chkDocId_" + k.ToString
chkBox.Checked = remainder = 0
lbl.Text = "Text indicator of CheckBox nr:" + k.ToString
cell.Controls.Add(chkBox)
cell.Controls.Add(lbl)
row.Cells.Add(cell)
cell = New HtmlTableCell()
tblEdit.Rows.Add(row)
Next
Dim checkBoxes As IEnumerable(Of HtmlInputCheckBox) =
(From mRow In tblEdit.Rows).Select(Function(mr)
Dim cb = (From cc In CType(mr, HtmlTableRow).Cells
Where CType(cc, HtmlTableCell).Controls.OfType(Of HtmlInputCheckBox).Count > 0
Select CType(cc, HtmlTableCell).Controls.OfType(Of HtmlInputCheckBox)()(0)).FirstOrDefault
Return CType(cb, HtmlInputCheckBox)
End Function).ToList
For Each checkBox In checkBoxes
Debug.WriteLine("CheckBox ID: {0} Checked: {1} ", checkBox.ID, checkBox.Checked)
Next
我根据数据库中的值在 VB.Net 和 .aspx 页面中动态创建复选框。为了便于对齐,我将它们放在两列 table 中。这部分工作正常。
Private Async Function InitForEditAsync() As Task
Dim docList = Await GetLoanApplicationConfigurationDocs()
Dim row = New HtmlTableRow()
Dim cell = New HtmlTableCell()
Dim i = 0
For Each doc In docList
Dim chkBox = New HtmlInputCheckBox()
Dim lbl = New Label()
Dim remainder = i Mod 2
chkBox.ID = "chkDocId" + doc.Id.ToString
lbl.Text = doc.DisplayName
cell.Controls.Add(chkBox)
cell.Controls.Add(lbl)
row.Cells.Add(cell)
cell = New HtmlTableCell()
If remainder <> 0 OrElse i = docList.Count() - 1 Then
tblEdit.Rows.Add(row)
row = New HtmlTableRow()
End If
i += 1
Next
End Function
现在我需要在不知道 ID 的情况下检索值,但我运气不好。我试过这个:
For Each chkBox As HtmlInputCheckBox In pnlEdit.Controls.OfType(Of HtmlInputCheckBox)
但控件列表中未返回复选框。 table 是,但是当我在控件集合中探索它时 table 对象中没有行,当我尝试这样做时:
For Each row As HtmlTableRow In tblEdit.Rows.OfType(Of HtmlTableRow)
如果有帮助,这里是创建的 UI 和 HTML 的片段:
如有任何建议,我们将不胜感激。提前致谢。
根据我从另一个站点获得的一些想法,我将使用 asp:CheckBoxList 重写它。显然它像数据网格一样绑定,您可以通过它进行枚举。好像是我需要的。
更新:我发布的所有内容都用五行代码解决了! “cblDocList 是我的 asp CheckboxList,而 docList 是我的可枚举的对象。
cblDocList.RepeatColumns = 2
cblDocList.DataSource = docList
cblDocList.DataTextField = "DisplayName"
cblDocList.DataValueField = "Id"
cblDocList.DataBind()
您可以通过对每一行和每个单元格进行循环或使用 Linq 来仅包含内部具有 HtmlInputCheckBox 类型控件的单元格。 我已将您的代码简化为 运行,此处还向您展示了一个示例来完成您的任务。显然,您必须根据自己的紧急情况进行更改。 希望我理解得很好:)
Dim tblEdit As New HtmlTable
For k As Integer = 0 To 10
Dim cell = New HtmlTableCell()
Dim row = New HtmlTableRow()
Dim chkBox = New HtmlInputCheckBox()
Dim lbl = New Label()
Dim remainder = k Mod 2
chkBox.ID = "chkDocId_" + k.ToString
chkBox.Checked = remainder = 0
lbl.Text = "Text indicator of CheckBox nr:" + k.ToString
cell.Controls.Add(chkBox)
cell.Controls.Add(lbl)
row.Cells.Add(cell)
cell = New HtmlTableCell()
tblEdit.Rows.Add(row)
Next
Dim checkBoxes As IEnumerable(Of HtmlInputCheckBox) =
(From mRow In tblEdit.Rows).Select(Function(mr)
Dim cb = (From cc In CType(mr, HtmlTableRow).Cells
Where CType(cc, HtmlTableCell).Controls.OfType(Of HtmlInputCheckBox).Count > 0
Select CType(cc, HtmlTableCell).Controls.OfType(Of HtmlInputCheckBox)()(0)).FirstOrDefault
Return CType(cb, HtmlInputCheckBox)
End Function).ToList
For Each checkBox In checkBoxes
Debug.WriteLine("CheckBox ID: {0} Checked: {1} ", checkBox.ID, checkBox.Checked)
Next