CheckBoxList不可见

时间:2013-01-23 10:55:46

标签: c# asp.net visual-studio-2010

请咨询 -

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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

首先,我从您的代码中注意到,当您的网页加载时,您无法调用方法PopulateRoleList - 代码中不存在Page_Load。单击LookupBtn_Click时会调用此方法。所以最初,CheckBoxList是空的。

其次,如果CheckBoxList的DataSource或Items为空,则页面上的CheckBoxList不可见。 (仍在寻找为何如此

结论是:验证您的角色数组是否为空。

你的populate方法应该是这么简单

 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);
     }
 }