by WebSurfer
2010年8月2日 12:35
GridView の n 番目(スタートは n = 0)の列名は、通常、GridView1.HeaderRow.Cells[n].Text のようにして取得できますが、AllowSorting プロパティが true になっていると、それでは取得できません(結果は "" になります)。
何故なら、GridView1.HeaderRow.Cells[n] には LinkButton コントロールが配置され、LinkButton の Text プロパティに列名が設定されるからです。
その場合は、以下のようにして取得できます。
string headerText;
foreach (Control ctl in GridView1.HeaderRow.Cells[n].Controls)
{
if (ctl is LinkButton)
{
headerText = ((LinkButton)ctl).Text;
break;
}
}
たぶん、GridView1.HeaderRow.Cells[n].Controls[0] が LinkButton になると思いますが、保証の限りではないので、ちょっと冗長かもしれませんが、上記のようにループで回して取得するように考えました。
by WebSurfer
2010年8月1日 16:26
CreateUserWizard を利用して新規ユーザー登録をする際に、ユーザーの漢字の氏名、住所などのユーザープロファイル情報を取得し、ASP.NET プロファイルを使用して保存する方法の紹介です。
MSDN ライブラリの CreateUserWizard クラス の 3 番目のコード例に、ユーザーの氏名をプロファイル情報として取得する方法が書かれています。
でも、これではうまくいきません。以下の問題があります。
-
web.config に <anonymousIdentification enabled="true" /> が必須(サンプルには書いてない)。
-
サンプルには <add name="userName" /> としか書いてないが、それでは allowAnonymous がデフォルトの false となり、Profile.SetPropertyValue メソッドで、ProviderException 例外がスローされる。
-
allowAnonymous を true にすると成功するように見えるが、匿名ユーザーの UserId の方にのみプロファイルデータが登録され、新規認証済みユーザーの UserId には登録されない。結果、新規認証済みユーザーの ID とパスワードで再ログインしてもプロファイルデータは取得できない。
上記の問題を解決して MSDN ライブラリのサンプルを書き換えると、以下のようになります。なお、サンプルの userName は KanjiName に変更していますので注意してください。
web.config の設定
<anonymousIdentification enabled="true" />
<profile>
<properties>
<add name="KanjiName" />
</properties>
</profile>
.aspx のコード
<%@ page language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
ProfileCommon profile =
(ProfileCommon)ProfileCommon.Create(
CreateUserWizard1.UserName, true);
profile.KanjiName = lastName.Text + " " + firstName.Text;
profile.Save();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>CreateUserWizard.CreatedUser サンプル</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:createuserwizard
id="CreateUserWizard1"
oncreateduser="CreateUserWizard1_CreatedUser"
runat="server">
<wizardsteps>
<asp:wizardstep
ID="Wizardstep1"
runat="server"
steptype="Start"
title="Identification">
氏名を記入してください:<br />
<table width="100%">
<tr>
<td>
姓:</td>
<td>
<asp:textbox id="lastName" runat="server" />
</td>
</tr>
<tr>
<td>
名:</td>
<td>
<asp:textbox id="firstName" runat="server" />
</td>
</tr>
</table>
</asp:wizardstep>
<asp:createuserwizardstep
ID="Createuserwizardstep1"
runat="server"
title="Sign Up for Your New Account">
</asp:createuserwizardstep>
</wizardsteps>
</asp:createuserwizard>
</div>
</form>
</body>
</html>
なお、allowAnonymous="true" としておくと、aspnet_Users に匿名ユーザーが残ってしまうことがあるので、ユーザー登録のときに記入してもらう漢字名などのデータは、allowAnonymous="false" としておくのが正解のようです。
また、例えば買い物籠のように、最初は匿名ユーザーとして入力され、ある時点で認証ユーザーとなって購入に進むような場合は、MSDN ライブラリの ASP.NET プロファイル プロパティのユーザー ID の例に示すように
Global.asax の Profile_OnMigrateAnonymous イベントハンドラで処置するのが適当かもしれません。
by WebSurfer
2010年7月31日 16:04
これはあまり役に立たないかもしれませんが・・・
プロファイル機能を使用する場合、認証されていないエンティティ(匿名ユーザー��を識別するための ID が必要になります。
anonymousIdentification 要素の enabled 属性を true に設定すると(デフォルトでは false)、ASP.NET は、匿名ユーザーに自動的に ID を与えます。以下は、その ID の取得方法です。
まず、web.config で、anonymousIdentification 要素と profile 要素を設定します。以下の設定は最低限必要です。
<anonymousIdentification enabled="true" />
<profile>
<properties>
<add name="Dummy" />
</properties>
</profile>
上記では properties の name はとりあえず Dummy としていますが、実際にプロファイルを使用する場合は適切な名前をつけてください(例えば、ユーザーの漢字の名前をプロファイルに保存する場合は KanjiName にするなど)。
ユーザーを識別するための ID は以下のようにして取得できます。
string anonymousId = Profile.UserName;
Froms 認証では、匿名ユーザーの ID は 14106048-46df-4104-a78d-0fda2b577365 のような Guid の文字列になり、認証されると登録済みのユーザー名に変わります。