トップ回答者
CreateUserWizardで追加した入力項目の内容をASPNETDBから取得できません

質問
-
現在、Windows2008server,SQLserver2005,VisualStudio2008の環境で開発しております。
フォーム認証での動作は確認できていますが、新規登録で漢字の名前も必要となりCreateUserWizardに
入力できるようにテキストボックスを追加しました。(web.configには"KanjiName"をAddしてあります)
入力するとASPNETDBのaspnet_Profileに入力した漢字名が含まれるレコードが追加されたのは確認できました。
ところが、漢字の名前で登録したIDでログオンし Profile.KanjiName で名前を取得しようとしましたが取得できず
テーブルを見てみると、aspnet_Membership と aspnet_Profile のUserIDが違っておりました。
(ちなみに、UserIDを同じにしてみたら取得できましたが・・・)
そもそも取得方法がまちがっているのでしょうか?
よろしくお願いいたします。
回答
-
CreateUserWizard1_CreatedUser イベントハンドラ内で、
Profile.SetPropertyValue("KanjiName", txtName.Text)
を、以下に置き換えるとうまくいくのではないかと思います(すみませんが、VB はよく分からな
いので C# で書きました。VB に書き換えてください)。ProfileCommon p = (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true);
p.KanjiName = txtName.Text;
p.Save();お試しください。
なお、匿名ユーザーのアクセスを許可しておくと、aspnet_Users に匿名ユーザーが残ってしま
うので、web.config で KanjiName プロパティの allowAnonymous を false にしておいた方
がいいと思います。- 編集済み SurferOnWww 2010年1月26日 2:48 誤記訂正: Createuserwizard1 → CreateUserWizard1
- 回答としてマーク 菊地俊介 2010年2月17日 4:58
すべての返信
-
ユーザ情報ですが、一度ユーザが作成されていから追加するような形にしないとダメだったんじゃないかと思います。
プロファイルは認証していない状態でも使えるようになっているので、ユーザができるまえにプロファイルに漢字名の登録が行われちゃったんじゃないでしょうか。
たしかScottGuのBlogだったと思いますが、CreateUserWizardにワンステップ追加してプロファイルに必要な情報を登録する方法が載っていたと思います。
また、別の方法としては認証前のプロファイルが持っている情報をユーザ登録した時点で引き継ぐということができるので、その引き継ぎを使うようにすればよいかな、と思います。
#未検証ですが。
あおい情報システム株式会社 小野修司(どっとねっとふぁん) -
以下のページの「匿名プロファイルの情報の移行」が参考になりませんか?
ASP.NET プロファイル プロパティのユーザー ID
http://msdn.microsoft.com/ja-jp/library/ewfkf772.aspx -
-
小野@どっとねっとふぁん 様
情報いただきありがとうございました。
いただいた記事参考にさせていただき、テストしてみましたが結果はうまくいきませんでした。
CreateUserWizard1_CreatedUserというイベントにおいて、aspnet_Userテーブルに作られた
ユーザーIDと同じIDを持つprofileレコードができると解釈しましたが
匿名ユーザーとして(aspnet_userでできたユーザーIDとは違うもので)登録されてしまいました。
LoginCreatedUserはTrueに設定おりますができませんでした。
ほかのイベントも捕らえてみましたがいずれもうまくいきませんでした。
結局、認証後に表示するページにてaspnet_Profileテーブルに登録がなければそこで
漢字名を入力させることで対処することにいたしました。
皆様、アドバイスをいただきありがとうございました。 -
SurferOnWww 様
ありがとうございます。
それではアップさせていただきますのでよろしくお願いいたします。
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="CreateUser.aspx.vb" Inherits="CreateUserWizard_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server">
<WizardSteps>
<asp:CreateUserWizardStep 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="Label1" runat="server" AssociatedControlID="Label1">ユーザー名(漢字):</asp:Label>
</td>
<td>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="txtName" 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 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 runat="server" >
<ContentTemplate>
<table border="0">
<tr>
<td align="center" colspan="2">
完了</td>
</tr>
<tr>
<td>
アカウントが正しく作成されました。</td>
</tr>
<tr>
<td align="right" colspan="2">
<asp:Button ID="ContinueButton" runat="server" CausesValidation="False"
CommandName="Continue" Text="続行" ValidationGroup="CreateUserWizard1" />
</td>
</tr>
</table>
</ContentTemplate>
</asp:CompleteWizardStep>
</WizardSteps>
</asp:CreateUserWizard>
</div>
</form>
</body>
</html>
Partial Class CreateUserWizard_Default
Inherits System.Web.UI.PageProtected Sub CreateUserWizard1_CreatedUser(ByVal sender As Object, ByVal e As System.EventArgs) Handles CreateUserWizard1.CreatedUser
Dim txtName As TextBox = CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txtName")
Profile.SetPropertyValue("KanjiName", txtName.Text)
End SubEnd Class
-
CreateUserWizard1_CreatedUser イベントハンドラ内で、
Profile.SetPropertyValue("KanjiName", txtName.Text)
を、以下に置き換えるとうまくいくのではないかと思います(すみませんが、VB はよく分からな
いので C# で書きました。VB に書き換えてください)。ProfileCommon p = (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true);
p.KanjiName = txtName.Text;
p.Save();お試しください。
なお、匿名ユーザーのアクセスを許可しておくと、aspnet_Users に匿名ユーザーが残ってしま
うので、web.config で KanjiName プロパティの allowAnonymous を false にしておいた方
がいいと思います。- 編集済み SurferOnWww 2010年1月26日 2:48 誤記訂正: Createuserwizard1 → CreateUserWizard1
- 回答としてマーク 菊地俊介 2010年2月17日 4:58