SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Microsoft AJAX Libraryでドラッグ&ドロップ対応のWebページを作成する

Atlasによるドラップ&ドロップ可能なパネルの実装

ページのパーソナライズ

 ページ内でコントロールをドラッグ&ドロップできるようになりましたが、アプリケーションを再起動すると、移動したコントロールは元の場所に戻ってしまいます。実際に使用するアプリケーションならば、ページの設定を記憶できるようにしたいはずです。そのためには、ASP.NET 2.0のプロファイルサービスを使用します。

 ASP.NET 2.0のプロファイルサービスを使用するには、いくつか操作が必要です。まず、「Web.config」ファイルに以下のコードを追加して、このアプリケーションにプロファイルプロパティを1つ追加します。

<system.web>
  <profile>
    <properties>
      <add name="Panel1Loc" type="System.String" />
    </properties>
  </profile>

 次に、「Web.config」ファイルの<profileService>要素のコメント化を解除して、Atlasがプロファイルサービスをサーバー側で使用できるようにします。プロファイルサービスの属性を次のように設定します。

<profileService enabled="true"
                setProperties="Panel1Loc"
                getProperties="Panel1Loc" />

 これによって、Panel1Locという名前のプロファイルプロパティの読み取りと書き込みが可能になります。

 次に、<atlas:DragOverlayProperties>コントロールにProfileProperty属性を追加し、値を「Panel1Loc」とします。これによって、このコントロールが拡張するPanelコントロールの位置を、Panel1Locという名前のプロファイルプロパティに保存できるようになります。

<atlas:DragOverlayExtender ID="DragOverlayExtender1"
                           runat="server">
    <atlas:DragOverlayProperties TargetControlID="Panel1"
               Enabled="true" ProfileProperty="Panel1Loc" />
</atlas:DragOverlayExtender>

 最後に、<atlas:ProfileScriptService>コントロールを追加し、そのAutoSave属性をtrueに設定します。これによって、Panelコントロールをドラッグ&ドロップするたびに、新しい位置がプロファイルプロパティに自動的に保存されます。

<atlas:ScriptManager ID="ScriptManager1" runat="server"
                     EnablePartialRendering="true" />
<atlas:ProfileScriptService ID="ProfileScriptService1"
                        runat="server" AutoSave="true" />

 これで完了です。[F5]キーを押してこのアプリケーションをテストします。時計を別の場所にドラッグ&ドロップします。アプリケーションの実行を終了してから再起動すると、時計は移動した場所に表示されます。

データベースの確認

 時計の位置情報が実際に保存されていることを確認してみましょう。プロジェクトの「App_Data」フォルダを最新の状態に更新します(図3を参照)。新しく「ASPNETDB.MDF」というデータベースが作成されていることが分かります。ASP.NETによって、このデータベースにアプリケーション関連データが保存されます。

図3 ページ上の各要素の位置データが保存されるASPNETDB.MDFデータベース
図3 ページ上の各要素の位置データが保存されるASPNETDB.MDFデータベース

 この「ASPNETDB.MDF」ファイルをダブルクリックします。サーバーエクスプローラでテーブル項目を展開し、「aspnet_Profile」テーブルを右クリックしてから[Show Table Data]をクリックします。このテーブルの先頭の行に、プロファイルプロパティの値が表示されます(図4を参照)。

図4 プロファイルプロパティの値が含まれる行
図4 プロファイルプロパティの値が含まれる行
著者注
 この例では既定のWindows認証を使用しているため、自分のWindowsログインがユーザー名(別途「aspnet_Users」テーブルに保存される)として使用されます。プロファイルサービスはフォーム認証とも連動し、認証済みユーザーと匿名ユーザーに対応します。

複数パネルの追加

 ここまでは1つのPanelコントロールのみを見てきました。今度は、Panelコントロールをもう1つ追加して、日本の現在時刻を表示させてみます。次のように追加と変更を行います。

 ページに新しい<atlas:UpdatePanel>コントロール(UpdatePanel2)を追加し、これにもう1つのPanelコントロール(Panel2)を追加します(今度は時計に日本の時刻を表示させます)。

<atlas:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
       ...
       ...
    </ContentTemplate>
</atlas:UpdatePanel>
<atlas:UpdatePanel ID="UpdatePanel2" runat="server">
    <ContentTemplate>
        <asp:Panel ID="Panel2" runat="server"
                   BorderStyle="Solid"
                   Height="198px" Width="194px">

            <script
               src="http://www.clocklink.com/embed.js">
            </script>

            <strong>Current Time in Japan</strong>

            <script type="text/javascript"
                    language="JavaScript">
                obj = new Object;
                obj.clockfile = "0008-Yellow.swf";
                obj.TimeZone = "JST";
                obj.width = 200;
                obj.height = 200;
                obj.wmode = "transparent";
                showClock(obj);
            </script>
        </asp:Panel>
    </ContentTemplate>
</atlas:UpdatePanel>

 <atlas:DragOverlayExtender>に新しい<atlas:DragOverlayProperties>コントロールを追加して、2つ目のPanelコントロールを拡張します。

<atlas:DragOverlayExtender ID="DragOverlayExtender1"
                           runat="server">
    <atlas:DragOverlayProperties TargetControlID="Panel1"
               Enabled="true" ProfileProperty="Panel1Loc" />
    <atlas:DragOverlayProperties TargetControlID="Panel2"
               Enabled="true" ProfileProperty="Panel2Loc" />
</atlas:DragOverlayExtender>

 「Web.config」で、Panel2Locという名前の新しいプロファイルプロパティを追加します。

<profile>
    <properties>
        <add name="Panel1Loc" type="System.String" />
        <add name="Panel2Loc" type="System.String" />
    </properties>
</profile>

 最後に、setProperties属性とgetProperties属性を変更してPanel2Locプロファイルプロパティも対象にします。

<profileService enabled="true"
                setProperties="Panel1Loc;Panel2Loc"
                getProperties="Panel1Loc;Panel2Loc" />

 [F5]キーを押してこのアプリケーションをテストします。2つの時計をドラッグ&ドロップできるようになり、ページをロードし直しても2つの時計の位置は保持されます(図5を参照)。

図5 2つのPanelコントロールをドラッグ&ドロップできる
図5 2つのPanelコントロールをドラッグ&ドロップできる

次のページ
DragPanelExtenderコントロールを使ったドラッグ&ドロップ

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Wei-Meng Lee(Wei-Meng Lee)

Microsoft MVP受賞者。Microsoft社の最新テクノロジー実地研修を専門とするDeveloper Learning Solutions社を創設。.NETとワイヤレステクノロジーの開発者、指導者として知られる。国際的なカンファレンスでたびたび講演し、.NET、XML、ワイヤレステクノロジーに関す...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/872 2007/01/26 00:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー