【问题标题】:Radiobuttonlist results not working when rbl's dynamically created动态创建 rbl 时 Radiobuttonlist 结果不起作用
【发布时间】:2011-02-24 19:26:41
【问题描述】:

我有 20 个动态创建的单选按钮列表 - 然后在提交表单时声明。

我还有一些代码,用于计算已回答问题的总数和已回答问题的总价值。 - 当单选按钮列表被硬编码到页面中时,此代码曾经可以工作,但现在不行。 - 我正在写回答的问题数量和页面所有答案的总价值,但它们返回为 0。

既然单选按钮列表是动态创建的,谁能明白为什么这可能不起作用。?

后面的代码:

Sub Page_Load(ByVal Sender as Object, ByVal E as EventArgs)

        For i As Integer = 1 To 20

            Dim TableRow As New TableRow()
            Dim TableRowCell_1 As New TableCell()
            TableRow.Cells.Add(TableRowCell_1)
            holidayQuestionnaireTable.Rows.Add(TableRow)

            Dim question As New RadioButtonList
            question.ID = "question" & i

            question.Items.Insert(0, new listitem("", "1"))
            question.Items.Insert(1, new listitem("", "2"))
            TableRowCell_1.Controls.Add(question)

        Next

End Sub

...

Sub btnSendFeedback_Click(sender as Object, e as EventArgs)

    Dim question1 As RadioButtonList = DirectCast(Page.FindControl("question1"), RadioButtonList)
    Dim question2 As RadioButtonList = DirectCast(Page.FindControl("question2"), RadioButtonList)
    Dim question3 ...
    ...
    Dim question19 As RadioButtonList = DirectCast(Page.FindControl("question19"), RadioButtonList)
    Dim question20 As RadioButtonList = DirectCast(Page.FindControl("question20"), RadioButtonList)

    Dim rblCount As Double
    Dim total As Double
    Dim avg As Double

    For Each ctrl As UI.Control In Me.myPanel.Controls
        If TypeOf ctrl Is RadioButtonList Then
            Dim rbl As RadioButtonList = DirectCast(ctrl, RadioButtonList)
            If rbl.SelectedIndex > -1 And not rbl.ID = "question18" Then
                Dim value As Double = Double.Parse(rbl.SelectedValue)
                total += value
                rblCount += 1
            End If
        End If
    Next

    Response.Write(rblCount & " - " & total & " - " & (total / rblCount))

End Sub

主体:

<asp:Placeholder ID="myPanel" runat="server">
        <asp:Table runat="server" CellPadding="0" CellSpacing="0" GridLines="None" HorizontalAlign="Center" CssClass="ratingtable" ID="holidayQuestionnaireTable" />
        <asp:Button OnClick="btnSendFeedback_Click" runat="server" Text="Submit..." ID="submitbutton" />
</asp:Placeholder>

【问题讨论】:

  • "but it now does not." 是对不起作用的相当模糊的描述!
  • 对不起...希望现在更清楚一点。我不确定如何最好地解释它。
  • 您还应该显示动态添加 RBL 的代码(我假设是面板?!)。面板中似乎没有控件,那么您在何处、何时以及向什么添加 RadioButtonLists?您是否在每次回发时都重新创建它们?

标签: asp.net vb.net radiobuttonlist


【解决方案1】:

您更改了面板的内容并添加了一个表格,而不是使用面板直接添加 RadioButtonLists。 FindControl 将只查看 Panel 的 NamingContainer,而不查看其子控件的 NamingContainer。搜索 Panel 的控件集合也不起作用,因为 RBL 位于 Panel 内部的 Table 内部。因此,您必须循环 TableRows 以获取 RBL。看看:

For Each row As TableRow In Me.holidayQuestionnaireTable.Rows
     For Each cell As TableCell In row.Cells
         For Each ctrl As Control In cell.Controls
             If TypeOf ctrl Is RadioButtonList Then
                Dim rbl As RadioButtonList = DirectCast(ctrl, RadioButtonList)
                If rbl.SelectedIndex <> -1 AndAlso rbl.ID <> "question18" Then
                   Dim value As Int32 = Int32.Parse(rbl.SelectedValue)
                   total += value
                   rblCount += 1 'count only the selected RadiobuttonLists'
                End If
             End If
         Next
    Next
Next

如果要使用 FindControl 方法,则必须使用每个 radioButtonList 的 NamingContainer,即 TableRow。所以这也可以,但是非常静态且容易出错:

Dim question1 As RadioButtonList = DirectCast(Me.holidayQuestionnaireTable.Rows(0).FindControl("question1"), RadioButtonList)
Dim question2 As RadioButtonList = DirectCast(Me.holidayQuestionnaireTable.Rows(1).FindControl("question2"), RadioButtonList)
Dim question3 As RadioButtonList = DirectCast(Me.holidayQuestionnaireTable.Rows(2).FindControl("question3"), RadioButtonList)

【讨论】:

  • @Tom:很高兴我能帮上忙。请注意,我添加了另一种通过 FindControl 获取问题的方法。
猜你喜欢
  • 2012-01-26
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
相关资源
最近更新 更多