首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建rbl时,单选按钮列表结果不起作用

动态创建rbl时,单选按钮列表结果不起作用
EN

Stack Overflow用户
提问于 2011-02-24 17:59:38
回答 1查看 1.5K关注 0票数 1

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

我也有一些代码,其中包括回答问题的总数和回答问题的总价值。-当单选按钮列表被硬编码到页面中时,此代码曾经有效,但现在不起作用。-我正在将回答的问题数和所有答案的总值写到页面上,但它们返回的值为0。

既然单选按钮列表是动态创建的,那么谁能理解为什么这不起作用呢?

代码隐藏:

代码语言:javascript
复制
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

..。

代码语言:javascript
复制
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

正文:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-24 19:15:22

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

代码语言:javascript
复制
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。所以这也是可行的,但是非常静态且容易出错:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5103036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档