2010年9月11日土曜日

プロコン2010-1その5

今回は、ユーザ追加画面。
こんな感じの画面です。

で、今回も先に、コードをさらします。
まずは、~/Admin/AddUser.aspxの内容から。

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" OnCreatedUser="CreateUserWizard1_CreatedUser">
<WizardSteps>
<asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
<ContentTemplate>
<table border="0">
<tr>
<td align="center" colspan="2">
新しいアカウントにサインアップ
</td>
</tr>
<tr>
<td align="right">
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">ユーザー名:</asp:Label>
</td>
<td>
<asp:TextBox ID="UserName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
ErrorMessage="ユーザー名が必要です。" ToolTip="ユーザー名が必要です。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="right">
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">パスワード:</asp:Label>
</td>
<td>
<asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
ErrorMessage="パスワードが必要です。" ToolTip="パスワードが必要です。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="right">
<asp:Label ID="ConfirmPasswordLabel" runat="server" AssociatedControlID="ConfirmPassword">パスワードの確認入力:</asp:Label>
</td>
<td>
<asp:TextBox ID="ConfirmPassword" runat="server" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="ConfirmPasswordRequired" runat="server" ControlToValidate="ConfirmPassword"
ErrorMessage="パスワードの確認入力が必要です。" ToolTip="パスワードの確認入力が必要です。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="right">
<asp:Label ID="EmailLabel" runat="server" AssociatedControlID="Email">電子メール:</asp:Label>
</td>
<td>
<asp:TextBox ID="Email" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="EmailRequired" runat="server" ControlToValidate="Email"
ErrorMessage="電子メールが必要です。" ToolTip="電子メールが必要です。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="right">
<asp:Label ID="QuestionLabel" runat="server" AssociatedControlID="Question">セキュリティの質問:</asp:Label>
</td>
<td>
<asp:TextBox ID="Question" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="QuestionRequired" runat="server" ControlToValidate="Question"
ErrorMessage="セキュリティ質問が必要です。" ToolTip="セキュリティ質問が必要です。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="right">
<asp:Label ID="AnswerLabel" runat="server" AssociatedControlID="Answer">セキュリティ返答:</asp:Label>
</td>
<td>
<asp:TextBox ID="Answer" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="AnswerRequired" runat="server" ControlToValidate="Answer"
ErrorMessage="セキュリティ返答が必要です。" ToolTip="セキュリティ返答が必要です。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td colspan="2">
<asp:CheckBoxList ID="CheckBoxList1" runat="server" RepeatDirection="Horizontal"
DataSourceID="ObjectDataSource1" DataTextField="RoleName" DataValueField="RoleName">
</asp:CheckBoxList>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllRole"
TypeName="Library.DAC.RoleInfo"></asp:ObjectDataSource>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<asp:CompareValidator ID="PasswordCompare" runat="server" ControlToCompare="Password"
ControlToValidate="ConfirmPassword" Display="Dynamic" ErrorMessage="パスワードと確認用パスワードは一致しなければなりません。"
ValidationGroup="CreateUserWizard1"></asp:CompareValidator>
</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>
</asp:CreateUserWizard>
</asp:Content>


もちろん、こんな長いコードをコードで打ったわけではありません。VisualStudioのデザインビューで操作していたらこんな長くなっちゃっただけです。あとから、デザインビューの操作を記述します。

続いて、コードビハインド。

using System;
using System.Web.Security;
using System.Web.UI.WebControls;

namespace Library.Admin
{
public partial class AddUser : LibPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
CheckBoxList cbl = CreateUserWizardStep1.Controls[0].FindControl("CheckBoxList1") as CheckBoxList;
if (cbl != null)
{
foreach (ListItem tmp in cbl.Items)
{
if (tmp.Selected)
{
Roles.AddUserToRole(CreateUserWizard1.UserName, tmp.Text);
}
}
}
}
}
}



今回のシステムでは、ユーザ登録と同時にロール登録もしてしまうようにしたのでその部分だけをコード化しています。そういえば、コードビハインドの部分、スケルトンでは冒頭のusing行がいっぱい出てくるんだけど、要らないものがいっぱいあるので、いったんコード作成が完了したら、コード画面で右クリックしてUsingの整理(削除および並び替え)をしておいたほうがすっきりします。


今回も、AddUser2.aspxを元にデザイン操作を見ていきます。

準備として、何時も通りの編集で、こんなコードにしておきます。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AddUser2.aspx.cs" Inherits="Library.Admin.AddUser2"
MasterPageFile="~/Admins.Master" StylesheetTheme="Standard" %>

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
</asp:Content>



次にデザイン、今回は並べて表示で見ていきます。
こんな画面から、


まず左の方、CreateUserWizardコントロールを配置。


続いて、ユーザ作成ステップのカスタマイズを選びます。(ここでデザインのファイルサイズがぐぐっと増大)



ドキュメントアウトラインを参考に、並べて表示の上の画面で、tr,tdタグを入れて場所を確保します。保存すれば、デザインの方も反映されます。

続いて確保した場所にCheckBoxListコントロールを配置します。

データソースの選択で、新しいデータソース、オブジェクトを選択します。


DACのコードにデータコンポーネント指定のアトリビュートを付けておけばチェックボックスを外さなくても
選べたんだけど。。。付けてなかったのでチェックを外して選びます。(DAC,DataSet,DataAdapterの作成は次回に解説します。)
で、Selectの部分で、作っておいたメソッドを指定します。


このWizardの最後に、チェックボックスに指定する値を選択します。


このコントロールを選んで、イベントを設定。
CreateUserWizardを選択した状態で、プロパティタブで稲妻アイコンをクリックして、CreateUserの右のドロップダウンリストが出ているところでダブルクリックするとイベントハンドラが設定され、コードビハインド画面に行く。


ここで最初のコードを記述する。

0 件のコメント: