usercontrol中的复选框不会检查,尽管他们说它们是

时间:2010-02-15 18:28:27

标签: asp.net user-controls checkbox

我有一个简单的用户控件,有一个datalist,里面有复选框。

 <asp:DataList ID="DataListDroits" runat="server" DataKeyField="droit_id" DataSourceID="SqlDroits">
      <ItemTemplate>
           <asp:HiddenField ID="HiddenFieldDroitID" runat="server" Value='<%# Eval("droit_id") %>' />
           <asp:CheckBox ID="CheckBoxDroit" runat="server" Text='<%# Eval("droit_label") %>' />
      </ItemTemplate>
 </asp:DataList>

我使用usercontrol中的代码检查它们:

 Public Sub CheckRole(ByVal role As Integer)
     For Each dliOrganisme As DataListItem In Me.DataListOrganismes.Items
         Dim DataListDroits As DataList = dliOrganisme.FindControl("DataListDroits")
         If DataListDroits IsNot Nothing Then
             For Each dliDroit As DataListItem In DataListDroits.Items
                 If role = CInt(CType(dliDroit.FindControl("HiddenFieldDroitID"), HiddenField).Value) Then
                     Dim CheckBoxDroit As CheckBox = dliDroit.FindControl("CheckBoxDroit")
                     CheckBoxDroit.Checked = True
                 End If
             Next ' DataListDroits
         End If
     Next ' DataListItem
 End Sub

在调用webform的page_load中:

            Dim CheckBoxesRoles1 As ASP.organisme_checkboxesroles_ascx = Me.FormViewRubrique.FindControl("CheckBoxesRoles1")
            Dim rolesCoches As New List(Of Integer)
            Dim cmdRoles As New SqlCommand("SELECT droit_id FROM o_droit_rubrique WHERE rubrique_id = @rubrique", conn)
            cmdRoles.Parameters.AddWithValue("rubrique", Request.QueryString("rid"))
            Dim rdrRoles As SqlDataReader = cmdRoles.ExecuteReader
            While rdrRoles.Read
                CheckBoxesRoles1.CheckRole(rdrRoles("droit_id"))
            End While
            rdrRoles.Close()

......然而,他们没有被检查 但如果我这样做:

 Protected Sub Page_LoadComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadComplete
    Dim CheckBoxesRoles1 As ASP.organisme_checkboxesroles_ascx = Me.FormViewRubrique.FindControl("CheckBoxesRoles1")
    If CheckBoxesRoles1 IsNot Nothing Then
        For Each role As Integer In CheckBoxesRoles1.CheckedRoles
            Response.Write("role : " & role & "<br>")
        Next
    End If
 End Sub

我告诉他他们是......

我在这里生气!为什么它告诉我他们被检查,而他们显然不是?

1 个答案:

答案 0 :(得分:0)

嗯......首先,你没有检查你的复选框是否被选中,你所做的只是输出“角色”的值。你到底想要什么?

两个建议: 1)在aspx中设置CheckBox的Checked属性,如下所示:

<asp:CheckBox ID="CheckBoxDroit" runat="server"  Text='<%# Eval("droit_label") %>' Checked='<%# (Eval("droit_id") > 0).ToString()' />

2)在代码隐藏

中的OnItemDataBound中设置属性

正在发生的两件事之一:您希望执行的代码是不是真正执行(即,您的if块是否真的?是否找不到控件?尝试断点),或者您正在执行此操作错误的时间 - 在页面已经呈现之后。