asp.net Web フォーム ベースの Web サイトにロール ベースの機能を追加しようとしています。
ASP.Net 構成を使用して 3 つの役割を作成しました。
- 管理者
- ゲスト
- 編集者
私はCreateUserWizardを使用してユーザーを作成していますが、新しいユーザーを作成するときにもロールを追加できるように少し変更しました。
以下は、.aspx ファイルと .cs からのコードです。
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server"
oncreateduser="CreateUserWizard1_CreatedUser">
<CreateUserButtonStyle BackColor="#2F5E8C" BorderStyle="None" ForeColor="White"
Height="24px" />
<WizardSteps>
<asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
<ContentTemplate>
<table border=0>
<tr>
<td align="right" class="tblRWHeight">
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">User Name:</asp:Label>
</td>
<td class="tblRWHeight">
<asp:TextBox ID="UserName" CssClass="txtbox300UserM" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server"
ControlToValidate="UserName" ErrorMessage="User Name is required."
ToolTip="User Name is required." ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="right" class="tblRWHeight">
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
</td>
<td class="tblRWHeight">
<asp:TextBox ID="Password" CssClass="txtbox300UserM" runat="server" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="PasswordRequired" runat="server"
ControlToValidate="Password" ErrorMessage="Password is required."
ToolTip="Password is required." ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="right" class="tblRWHeight">
<asp:Label ID="ConfirmPasswordLabel" runat="server"
AssociatedControlID="ConfirmPassword">Confirm Password:</asp:Label>
</td>
<td class="tblRWHeight">
<asp:TextBox ID="ConfirmPassword" CssClass="txtbox300UserM" runat="server" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="ConfirmPasswordRequired" runat="server"
ControlToValidate="ConfirmPassword"
ErrorMessage="Confirm Password is required."
ToolTip="Confirm Password is required." ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="right" class="tblRWHeight">
<asp:Label ID="EmailLabel" runat="server" AssociatedControlID="Email">E-mail:</asp:Label>
</td>
<td class="tblRWHeight">
<asp:TextBox ID="Email" CssClass="txtbox300UserM" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="EmailRequired" runat="server"
ControlToValidate="Email" ErrorMessage="E-mail is required."
ToolTip="E-mail is required." ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="center" colspan="2" >
<asp:CompareValidator ID="PasswordCompare" runat="server"
ControlToCompare="Password" ControlToValidate="ConfirmPassword"
Display="Dynamic" ErrorMessage="The Password and Confirmation Password must match."
ValidationGroup="CreateUserWizard1"></asp:CompareValidator>
</td>
</tr>
<tr>
<td align="right" class="tblRWHeight">
<asp:Label ID="Label1" runat="server" AssociatedControlID="Email">Add Role</asp:Label>
</td>
<td class="tblRWHeight">
<asp:DropDownList ID="ddRoleList" runat="server"> </asp:DropDownList>
</td>
</tr>
<tr>
<td align="center" colspan="2" >
</td>
</tr>
<tr>
<td align="center" colspan="2" style="color:Red;" >
<asp:Literal ID="ErrorMessage" runat="server" EnableViewState="False"></asp:Literal>
</td>
</tr>
</table>
</ContentTemplate>
</asp:CreateUserWizardStep>
<asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
</asp:CompleteWizardStep>
</WizardSteps>
<StartNavigationTemplate>
<asp:Button ID="StartNextButton" runat="server" CommandName="MoveNext" Text="Next" style="background-color:#2F5E8C; border:0px solid #AB1B56; height:24px; color:#fff;" />
</StartNavigationTemplate>
</asp:CreateUserWizard>
ドロップダウンを埋めて役割を保存する.CSファイルコード
DropDownList roleDropDownList;
protected void Page_Load(object sender, EventArgs e)
{
//if( (!IsPostBack))
//{
DataSet ds = new DataSet();
ds = DataProvider.Connect_Select(" select RoleName from aspnet_Roles");
roleDropDownList = (DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddRoleList");
roleDropDownList.DataSource = ds.Tables[0];
roleDropDownList.DataTextField = "RoleName";
roleDropDownList.DataValueField = "RoleName";
roleDropDownList.DataBind();
//}
}
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
Roles.AddUserToRole(CreateUserWizard1.UserName, roleDropDownList.SelectedValue);
}
このコードを使用すると、ユーザーを保存できますがAdmin
、ドロップダウンの最初にあるため、常にデータベースにロールとして保存されます。
どこで間違いを犯しているのか、またはアプローチが間違っているのかわかりません。次のリンクを参照ポイントとして使用しました
この点で助けていただければ幸いです。
更新: ドロップダウンが適切に入力されます
<select class="txtbox300UserM" id="MainContent_CreateUserWizard1_CreateUserStepContainer_ddRoleList" name="ctl00$MainContent$CreateUserWizard1$CreateUserStepContainer$ddRoleList">
<option value="Admin">Admin</option>
<option value="Guest">Guest</option>
<option value="Editor">Editor</option>
</select>
WORKING CODE : soemの理由で機能しない前に、同様のコードを試しました..以下のコードは機能しています...
protected void Page_Load(object sender, EventArgs e)
{
DropDownList roleDropDownList;
if (!Page.IsPostBack)
{
DataSet ds = new DataSet();
ds = DataProvider.Connect_Select("select RoleName from aspnet_Roles");
roleDropDownList = (DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddRoleList");
roleDropDownList.DataSource = ds.Tables[0];
roleDropDownList.DataBind();
}
}
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
string role = ((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddRoleList")).SelectedItem.Value.ToString();
Roles.AddUserToRole(CreateUserWizard1.UserName, role);
}