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 配列が空でないことを確認します。

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