家・車以外で、人生で一番奮発した買い物

おせわになります。
Visualstudio 2005 のASP.NET VB でWEBサイトを作成しております。

ASP.NET  で ログインコントロールを使って、認証ページを作っているのですが。

ID
PASSWORD

この2つのIDをログインコントロール内で、使用しているのは分かるのですが、

このIDに加え

ID
名前
PASSWORD

という3つのデータによって、ログイン制御を行いたいと考えております。
ログインコントロール内で、テーブルを追加して、「名前」を増やした所、
このIDをVB.NET側で、受け取れません。

ASP.NET 側の ログインコントロールのソースは




/////// ここからが問題の箇所 /////////////
<tr>
<td align="right" style="height: 24px; width: 149px;">
<asp:Label ID="Label2" runat="server" AssociatedControlID="USERID">ID:
</asp:Label></td>
<td style="height: 24px; width: 312px;">
<asp:TextBox ID="USERID" runat="server" MaxLength="5" OnTextChanged="USERID_TextChanged"
Width="152px">
</asp:TextBox>
<asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="USERID"
ErrorMessage="ユーザーIDは5文字以下にしてください。" ToolTip="ユーザーIDは10文字以下にしてください" Type="String"
ValidationGroup="Login1">*</asp:RangeValidator>
</td>
</tr>

/////// ここまでが問題の箇所 ////////////


/////// ここからは通常に起動 /////////////
<tr>
<td align="right" style="height: 24px; width: 149px;">
 <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">氏名(カナ):</asp:Label></td>
<td style="height: 24px; width: 312px;">
<asp:TextBox ID="UserName" runat="server" Width="152px" OnTextChanged="UserName_TextChanged" MaxLength="10">
</asp:TextBox>
<asp:RangeValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
ErrorMessage="ユーザー名は10文字以下にしてください。" Type ="String" ToolTip="ユーザー名は10文字以下にしてください" ValidationGroup="Login1">
*</asp:RangeValidator>
</td>
</tr>
<tr>
<td align="right" style="height: 29px; width: 149px;">
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">パスワード:
</asp:Label>
</td>
<td style="width: 312px; height: 29px;">
<asp:TextBox ID="Password" runat="server" TextMode="Password" Width="152px">
</asp:TextBox>
<asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
ErrorMessage="パスワードが必要です。" ToolTip="パスワードが必要です。" ValidationGroup="Login1">
*
</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="center" colspan="2" style="color: red">
<asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>
</td>
</tr>


VB.NET 側では以下のスクリプトで指定しています。



Protected Sub LoginButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Login1.LoggedIn

////////// 受け取れない //////////////////
Dim strID As String = Login1.UserID.ToString


////////// 受け取れる //////////////////
Dim strID As String = Login1.UserName.ToString

////////// 受け取れる //////////////////
Dim strID As String = Login1.Password.ToString

このように、LOGIN コントロールに UserIDを追加できません。
よって、session などに、 UserID のVALUE を受け取れるようにしたいのですが、
asp.net側の 設定はどのようにしたらよろしいのでしょうか。

ログインコントロールは あきらめて、通常の独自の認証システムを作るべきですかね。

ログインコントロールに 通常のテキストボックスとして、追加はできないものでしょうか。

どなたかご存知の方、いらっしゃいましたら、教えていただけますと幸いです。

どうぞ宜しくお願いいたします。

A 回答 (1件)

もともとのLoginクラスに UserIDなど独自に追加したプロパティが無いためです



独自にテンプレート化して追加したのであれば LoginコントロールのFindControlなどを使ってそのコントロールを特定しましょう

今回の例示なら
strID = CType( Login1.FindControl("USERID"), TextBox ).Text
といった具合です

もともとの UserNameやPasswordといったIDのコントロールを削除していないにもかかわらず Login1のプロパティで取得できないとなるとこのコードだけでは判別不能ですね
    • good
    • 0
この回答へのお礼

redfox63様
ありがとうございます。
CType( Login1.FindControl("USERID"), TextBox ).Text 
これで、望んでいた値を取得する事ができました。
しっかりと、LOGINコントロール に加わっていたのですね。

自分の方では、ログインコントロールの使用をあきらめて、
通常のテーブル、ボタンで処理を行った後に、
ログインの成否判定でのみ、ログインを使うという事を
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False)
してみたのですが、これでも成否判定をしてくれまして、
結構、ユーザー側の要求に柔軟に応えてくれるなぁと、
感心しておりました。おかげさまで、LOGINコントロールを
使用した仕様で作成できそうです。

CType等の働きや、追加したコントロールについての制御が勉強
不足でまだ疎い状況なので、再度勉強したいと思います。

大変、助かりました。ありがとうございました。

お礼日時:2009/02/06 09:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報