0

请建议 -

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

1 回答 1

0

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

其次,如果 CheckBoxList 的 DataSource 或 Items 为空,则 CheckBoxList在页面上不可见。(仍在寻找为什么会这样

结论是:验证您的 Roles 数组不为空。

您的填充方法应该如此简单

 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);
     }
 }
于 2013-06-10T11:58:56.147 回答