2013-01-23 43 views
0

請諮詢 -的CheckBoxList是不可見的

的CheckBoxList是不可見的 - 它必須顯示3個角色(現有的時刻):

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeBehind="admin.aspx.cs" 
Inherits="HSE_Monitoring_Application.admin.admin" title="Untitled Page" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server"> 

    <h3>Role Manager</h3> 

    <div> 
     Enter UserName: 
     <asp:TextBox ID="TxtUserName" runat="server"></asp:TextBox> 

     <asp:Button ID="LookupBtn" runat="server" Text="Search" /> 

    </div> 

    <div class="roleList"> 
     <asp:CheckBoxList ID="RoleList" runat="server" Visible=true> 
     </asp:CheckBoxList> 
    </div> 

    <div> 
     <asp:button ID="UpdateBtn" text="Update" Visible="false" runat="server" /> 
    </div> 

</asp:Content> 

的結果 - 它必須顯示3個複選框以3個角色 - 管理員,批准者,審覈員和按鈕「更新」。這些角色存在。 藉助角色複選框控件 - 管理員可以管理頁面上的角色成員資格。

它只顯示帶有文本框和按鈕(搜索)的標籤(輸入用戶名)。 請回復。如有必要,我可以提供所需的文件。 我花了很多時間來解決這個問題。

祝好!


「admin.aspx.cs」的內容是:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Security; 

namespace HSE_Monitoring_Application.admin 
{ 
    public partial class admin : System.Web.UI.Page 
    { 
     private void PopulateRoleList(String userName) 
     { 

      RoleList.Items.Clear(); 

      string[] roleNames; 
      //string roleName=""; 

      roleNames = Roles.GetAllRoles(); 

      Response.Write(roleNames); 

      foreach (string roleName in roleNames) 
      { 
       ListItem roleListItem = new ListItem(); 
       roleListItem.Text = roleName; 
       roleListItem.Selected = Roles.IsUserInRole(userName, roleName); 
       RoleList.Items.Add(roleListItem); 
      } 
     } 



     private void UpdateRolesFromList() 
     { 
      foreach (ListItem roleListItem in RoleList.Items) 
      { 
       string roleName = roleListItem.Value; 
       string userName = TxtUserName.Text; 
       Boolean enableRole = roleListItem.Selected; 

       if (enableRole == true && Roles.IsUserInRole(userName, roleName) == false) 
       { 
        Roles.AddUserToRole(userName, roleName); 
       } 
       else if (enableRole == false && Roles.IsUserInRole(userName, roleName) == true) 
       { 
        Roles.RemoveUserFromRole(userName, roleName); 
       } 
      } 
     } 

     private void LookupBtn_Click(object sender, EventArgs e) 
     { 
      PopulateRoleList(TxtUserName.Text); 
      UpdateBtn.Visible = true; 
     } 

     private void UpdateBtn_Click(object sender, EventArgs e) 
     { 
      UpdateRolesFromList(); 
      PopulateRoleList(TxtUserName.Text); 
     } 
    } 
} 
+0

你能表現出一定的代碼嗎? – Kiran1016

+0

你是否在你的代碼隱藏中綁定了RoleList的任何東西? – Matt

+3

你如何綁定你的CheckBoxList?我注意到'Visible = true'沒有雙引號,它應該是'Visible =「True」' – AbZy

回答

0

首先,我從你的代碼,發現沒有地方,你調用的方法PopulateRoleList當你的頁面加載 - Page_Load在您的代碼中不存在。當您單擊LookupBtn_Click時會調用此選項。所以最初,CheckBoxList是空的。

其次,如果CheckBoxList的DataSource或Items爲空,則CheckBoxList在頁面上不可見。 (仍在尋找爲什麼會是這樣

得出的結論是:驗證您的角色數組不爲空。

你填入的方法應該是這樣的簡單

private void PopulateRoleList(String userName) 
{ 
    string[] roleNames = Roles.GetAllRoles(); 
    RoleList.DataSource = roleNames; //if this is empty, CheckBoxList is not visiblie 
    RoleList.DataBind(); 

    foreach (ListItem item in RoleList.Items) 
    {     
      string roleName = item.Value; //Or item.Text; 
      item.Selected = Roles.IsUserInRole(userName, roleName); 
    } 
}