忍者ブログ

技術メモ

Home > ブログ > 記事一覧

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

◆Blog内検索

以下のソースをBlogのフリースペースに貼り付ける事で
Google機能を使ってBlog内検索を行う事ができる

<!-- SiteSearch Google -->
<div align=center>
<form method=get action="http://www.google.co.jp/search">
<table bgcolor="#FFFFFF" border=0 cellspacing=0 cellpadding=0><tr><td>
<input type=text name=q size=20 maxlength=255 value="">
<input type=submit name=btnG value="検索">
<input type=hidden name=ie value=EUC-JP>
<input type=hidden name=oe value=EUC-JP>
<input type=hidden name=hl value="ja">
<input type=hidden name=domains value="◆ドメイン名◆">
<input type=hidden name=sitesearch value="◆ドメイン名◆">
<br>
<a href="http://www.google.co.jp/"><img src="http://www.google.co.jp/logos/powered_by_google_135x35.gif" border="0" alt="Google" align="absmiddle"></a>
</td></tr></table>
</form>
</div>
<!-- SiteSearch Google -->

※"◆ドメイン名◆"に検索を掛けたいドメインを指定する
※"EUC-JP"の部分は適切な文字コードを指定する
 

PR

◆ASPでのMobile開発について

【Mobile開発のロードマップ】
 [ASPのバージョンについて]
  ●ASP.NET1.x
   デバイスプロファイル・デバイスドライバの
   Updateを行っていたが廃止
  ●ASP.NET2.0
   デバイスプロファイルツールUpdateにより
   ブラウザ機能ファイル(.browser)の作成可能
  ●ASP.NET2.0の新機能
   デバイスフィルタの簡略化
   ブラウザ機能ファイルの簡略化
   デバイス単位でのクッキーレス(1.xではアプリ全体)
 [ロードマップ]
  (1)モバイル・コントロールとデバイス・アダプタについて
   以下のものが最低限必要
   ①ASP.NET 1.1モバイル・コントロール
   ②デバイス・アップデート4まで(現時点で最新)のデバイス・アダプタ
  (2)ASP.NET 2.0からの新機能
   ①デバイス・フィルタが簡単に追加可能
   ②デバイス単位でのクッキーレスを実現(ASP.NET 1.1ではアプリケーション単位)
   ③ブラウザ・ファイルが簡略化され、開発者が更新可能
   ④開発者がコントロール・アダプタ*1をカスタマイズ可能
  (3)ここのデバイスの対応
   開発者が自分でカスタマイズして各デバイスに対応
   対応方法は以下の二つ
   ①既存のデバイス・アダプタをカスタマイズする
   ②マイクロソフトが提供するツール・セットで、独自のデバイス・アップデートを作成し、
    それを利用してデバイス・アダプタをアップデートする
   ※①の方が容易

 (参考文献)
 http://msdn.microsoft.com/ja-jp/library/cc671420.aspx

【Mobile開発でのキーワード】
 ●デバイスプロファイル
 ●デバイスドライバ
 ●デバイスフィルタ
  各デバイスの識別を行う機能
  デバイスごとに適切なレンダリング処理を行うために、接続してくるデバイスを識別する機能
 ●デバイス・アダプタ
  携帯電話などの各デバイスに対応したレンダリング処理を提供する機能
 ●ブラウザ機能ファイル
 ●プロファイル
 ●メンバーシップ
 ●パーソナライゼーション
 ●コントロール・アダプタ
  デバイス・アダプタの一種で、コントロールに対してデバイスごとのレンダリング処理を行う機能


【情報取得源】
 [対象クラス]
  (System.Web.Configuration.HttpCapabilitiesBase)(HttpContext.Current.Request.Browser)
 [プロパティ]
  ①Browser:ブラウザ情報
  ※HTTP要求ヘッダのUser-Agentから判別されたブラウザ名
  ②PreferredRenderingType:デバイス側で推奨されているコンテンツの種類
  デバイス・フィルタ機能を用いて②から①の情報を作成している

 

【デバイスフィルタ】
 (1)定義場所
  モバイルWeb構成ファイル(Web.config)

  <deviceFilters>
   <filter name="isJPhone" compare="Type" argument="J-Phone" />
   <filter name="isHTML32" compare="PreferredRenderingType" argument="html32" />
   <filter name="isWML11" compare="PreferredRenderingType" argument="wml11" />
   <filter name="isCHTML10" compare="PreferredRenderingType" argument="chtml10" />
   <filter name="isGoAmerica" compare="Browser" argument="Go.Web" />
   <filter name="isMME" compare="Browser" argument="Microsoft Mobile Explorer" />
   <filter name="isMyPalm" compare="Browser" argument="MyPalm" />
   <filter name="isPocketIE" compare="Browser" argument="Pocket IE" />
   <filter name="isUP3x" compare="Type" argument="Phone.com 3.x Browser" />
   <filter name="isUP4x" compare="Type" argument="Phone.com 4.x Browser" />
   <filter name="isEricssonR380" compare="Type" argument="Ericsson R380" />
   <filter name="isNokia7110" compare="Type" argument="Nokia 7110" />
   <filter name="prefersGIF" compare="PreferredImageMIME" argument="image/gif" />
   <filter name="prefersWBMP" compare="PreferredImageMIME" argument="image/vnd.wap.wbmp" />
   <filter name="supportsColor" compare="IsColor" argument="true" />
   <filter name="supportsCookies" compare="Cookies" argument="true" />
   <filter name="supportsJavaScript" compare="Javascript" argument="true" />
   <filter name="supportsVoiceCalls" compare="CanInitiateVoiceCall" argument="true" />
  </deviceFilters>

 (2)デバイス・フィルタの利用例
  下の赤字部分でデバイス・フィルタを利用している
  <mobile:Label ID="Label1" Runat="server">
   <DeviceSpecific>
    <Choice Filter="isCHTML10" Text="CHTML10" />
    <Choice Text="OTHER"/>
   </DeviceSpecific>
  </mobile:Label>

 (3)デバイス・フィルタ判別方法
  <filter name="isCHTML10" compare="PreferredRenderingType" argument="chtml10"/>

  ブラウザの情報を格納したHttpCapabilitiesBaseオブジェクトの
  PreferredRenderingTypeプロパティの値が“chtml10”だった場合、
  そのフィルタ名を“isCHTML10”とする
 (4)エバリュエータ・デリゲート型フィルタ
  ①エバリュエータ・デリゲート型フィルタクラスを作成
  ②エバリュエータ・デリゲート型フィルタを作成
   public static bool メソッド名(MobileCapabilities capabilities, string argument)
   例)
   -------------------------------------------------------------------------------------
   using System;
   using System.Web;
   using System.Web.Mobile;

   namespace Mlib
   {
    public class CapabilityEvaluators
    {
     private readonly static string[] SoftBankUserAgentList =
      new string[]
      {
       "J-PHONE",
       "Vodafone",
       "SoftBank",
       "J-EMULATOR", // エミュレータ用
       "Vemulator"  // エミュレータ用
      };

     public static bool isSoftBank(MobileCapabilities capabilities, string argument)
     {
      string[] agentInfo =
       HttpContext.Current.Request.UserAgent.Split('/');

      if (agentInfo.Length == 0)
       return false;

      return Array.IndexOf(SoftBankUserAgentList, agentInfo[0]) != -1;
     }
    }
   }
   -------------------------------------------------------------------------------------

  ③エバリュエータ・デリゲート型フィルタの利用
   下記の定義をWeb.configに追加する。
   <filter name="isSoftBank" type="Mlib.CapabilityEvaluators,Mlib" method="isSoftBank"/>
  ④コントロールに実装
   <DeviceSpecific>
     <Choice Filter="isSoftBank" Text="SoftBank" />
   </DeviceSpecific>

【デバイス・アダプタ】
 ・デバイス・アダプタを利用すると、モバイル・コントロールのレンダリング処理を、特定のデバイス向けにカスタマイズできる
 ・デバイス・アダプタを活用するには、ブラウザ定義ファイルを利用する

 (1)デバイス・アダプタを利用するには
  ①ブラウザ定義ファイルが必要
   ・デバイスの識別
   ・モバイルコントロールへのマッピング
  ②各デバイス毎に対応したモバイルコントロールが必要

 (2)デバイス・アダプタおよびクラスの種類
  ①コントロール・アダプタの基本クラス:
   以下のすべてのデバイス・アダプタの基本クラスで、一般的なレンダリング処理機能を提供する。
  ②ページ・アダプタ:
   モバイルWebフォーム・ページに対するレンダリング処理を行う。
  ③フォーム・アダプタ:
   Webページ内のFormコントロールに対するレンダリング処理を行う
   (※モバイルWebフォーム・ページには、複数のFormコントロールを含めることができる)。
  ④コントロール・アダプタ:
   Webページ内の標準のWebコントロールに対するレンダリング処理を行う。
   ページ・アダプタやフォーム・アダプタの基本クラスでもある。
  ⑤テキスト・ライタ:
   正確にはデバイス・アダプタではなく、各デバイス・アダプタのレンダリング処理で使われるオブジェクト。
   テキスト出力やデータのエンコードなどの機能を提供する。

 

◆GridViewソート設定サンプル

※このソースは未完成、グリッドにリンクボタンを設定してもイベントの
 タイミングによってクリックイベントがハンドルされない
※手動ソート設定のもう一つのやり方は、GridViewのSortedプロパティをTrueに
 設定して、HeaderText、SortExpressionを設定(デザイナ・プログラムでも良い)し、
 GridView_Sortingイベント中にソートさせる方法がある

//ヘッダー設定
string headtxt = Consts.GridInfo[i][(int)Consts.GridInfoIdx.HeadText].ToString();
if (string.IsNullOrEmpty(headtxt))
{
    LinkButton lnkHead = new LinkButton();
    lnkHead.Text = headtxt;
    lnkHead.CommandArgument = Consts.GridInfo[i][(int)Consts.GridInfoIdx.HeadSortKey].ToString();
    lnkHead.Click += new EventHandler(lnkHead_Click);
    grdHotelList.HeaderRow.Cells[i].Controls.Add(lnkHead);
}
//ヘッダークリック
protected void lnkHead_Click(object sender, EventArgs e)
{
    DataTable dt = (DataTable)grdHotelList.DataSource;
    DataView dv = dt.DefaultView;
    dv.Sort = ((LinkButton)sender).CommandArgument;
    grdHotelList.DataSource = dv.ToTable();
    grdHotelList.DataBind();
}
 

◆独自のエクステンダ・コントロールを作成する

[ASP.NET AJAX]独自のエクステンダ・コントロールを作成するには?(サーバサイド編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/947aspajaxcustomextender1/aspajaxcustomextender1.html
[ASP.NET AJAX]独自のエクステンダ・コントロールを作成するには?(クライアントサイド編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/951aspajaxcustomextender2/aspajaxcustomextender2.html

1. プロジェクト作成
  クラスライブラリでプロジェクトを作成
  binにAjaxControlToolkit.dllを配置

2. プロジェクトに参照を追加する
  System.Design
  System.Web
  System.Web.Extensions
  System.Web.Extensions.Design
  AjaxControlToolkit.dll

3. デザイナ・クラスを定義する
  最低限のファイルは以下の構成
  XxxxxExtender.cs
    エクステンダ・クラス。コントロールのサーバサイド機能を定義するクラス
  XxxxxDesigner.cs
    デザイナ・クラス(コントロールのフォーム・デザイナ上での挙動を定義するためのクラス)
  XxxxxBehavior.js
    Behaviorオブジェクト。コントロールのクライアントサイド機能を定義するクラス

  必要であれば、画像ファイル・スタイルシートなどのリソースファイルを追加

  エクステンダー・コントロールはフォーム・デザイナ上の見掛けを持たないので
  デザイナクラスは空のものでよい

  ①デザイナ・クラス定義
    デザイナ・クラスであることの条件は、
    ExtenderControlBaseDesigner<T>クラス(AjaxControlToolkit.Design名前空間)を継承するという
    ジェネリックの型パラメータには、対応するエクステンダ・クラスを指定すればよい

    -------------------------------------------------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using AjaxControlToolkit.Design;

    namespace MyExtender {
     class DialogButtonDesigner : ExtenderControlBaseDesigner<DialogButtonExtender> { }
    }
    -------------------------------------------------------------------------------------------

  ②エクステンダ・クラスを定義
    サーバサイド機能を定義する
    エクステンダ・クラスで定義する必要があるのは、コントロールとして公開すべきプロパティの定義と、
    デザイナ・クラス/Behaviorオブジェクトの宣言(関連付け)

    ・エクステンダ・クラスはExtenderControlBaseクラスを継承する
     ExtenderControlBaseクラス(AjaxControlToolkit名前空間)は、クライアントサイド・スクリプトの
     管理をはじめ、Behaviorオブジェクトとのプロパティ値の受け渡し、ターゲット要素とのひも付けなど、
     エクステンダ・コントロールの動作には欠かせない基本的な機能を提供するクラス
    ・TargetControlType属性は、エクステンダを適用できるコントロールを制限するための属性

    -------------------------------------------------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using AjaxControlToolkit;

    [assembly:WebResource("MyExtender.DialogButtonBehavior.js", "text/javascript")]
    namespace MyExtender {

     [Designer(typeof(DialogButtonDesigner))]
     [ClientScriptResource("MyExtender.DialogButtonBehavior", "MyExtender.DialogButtonBehavior.js")]
     [TargetControlType(typeof(IButtonControl))]
     public class DialogButtonExtender : ExtenderControlBase {

      // Messageプロパティを定義
      [ExtenderControlProperty]
      [DefaultValue("")] 
      public string Message {
       get {
        return GetPropertyValue("Message", "");
       }
       set {
        SetPropertyValue("Message", value); 
       }
      }
     }
    }
    -------------------------------------------------------------------------------------------

4. Behaviorオブジェクトを定義する
  ・Behaviorオブジェクトはエクステンダのクライアントサイド機能を定義するためのJavaScriptのクラス
  ・Behaviorオブジェクトはエクステンダの挙動を決める
   ―実質、エクステンダ・コントロールの中核を担うクラス
  ・Behavior.jsは「ビルドアクション」-「埋め込まれたリソース」として設定する

  ①AjaxControlToolkit.BehaviorBaseクラスを継承すること
  ②エクステンダ・クラスのプロパティと対応していること
  ③プロパティ値の変更はraisePropertyChangedメソッドで通知
  ④イベント・ハンドラを登録する

    -------------------------------------------------------------------------------------------
    // MyExtender名前空間を宣言
    Type.registerNamespace("MyExtender");

    // MyExtender.DialogButtonBehaviorクラスのコンストラクタ
    MyExtender.DialogButtonBehavior = function(element) {

     // 基底クラスのコンストラクタをコール
     MyExtender.DialogButtonBehavior.initializeBase(this, [element]);

     // Messageプロパティの値を格納するためのプライベート変数を初期化
     this._Message = '';
    }

    // MyExtender.DialogButtonBehaviorクラスのメソッドを定義
    MyExtender.DialogButtonBehavior.prototype = {

     // Behaviorオブジェクトを初期化
     initialize: function() {

     // 基底クラスのinitializeメソッドをコール
      MyExtender.DialogButtonBehavior.callBaseMethod(this, 'initialize');


      // ターゲット要素にclickイベント・ハンドラを関連付け
      $addHandler(
       this.get_element(),
       'click',
       Function.createDelegate(this, this._onClick)
      );

    },

     // Messageプロパティのゲッター・メソッド
     get_Message: function() {
       return this._message;
     },

     // Messageプロパティのセッター・メソッド
     set_Message: function(value) {

      // 設定値が元の値と異なる場合にのみ変更処理を実施
      if (this._message !== value) {
       this._message = value;
       this.raisePropertyChanged('Message');
      }
     },

     // ターゲット要素がクリックされたときの処理
     _onClick: function(e) {
    
      // ダイアログを表示した後、イベントをキャンセル(ポストバックを抑制)
      window.alert(this._message);
      return false;
     }
    };

    // BehaviorBaseオブジェクトを継承する
    // MyExtender.DialogButtonBehaviorクラスを登録
    MyExtender.DialogButtonBehavior.registerClass(
     'MyExtender.DialogButtonBehavior',
     AjaxControlToolkit.BehaviorBase);
    -------------------------------------------------------------------------------------------
 

◆プロファイルの設定

[プロファイルの呼出]
ASP.NET 2.0ではユーザー固有の情報(プロファイル)を管理するための
「プロファイル」機能が導入された

ユーザーごとに異なるテーマを適用し、
パーソナライズされたページを見せたりといった機能も簡単に実現
※匿名ユーザの場合は、[匿名ユーザの設定]が必要になります

1. プロファイル・プロパティを定義する
Web.config上に定義
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <profile enabled="true">
      <properties>
        <add name="param" type="String" allowAnonymous="true" defaultValue="" readOnly="false"/>
      </properties>
    </profile>
  </system.web>
</configuration>

2.値の取得・設定
 string aaa = Profile.param;
 Profile.param = "bbb";

※実際にプロファイルがデータベースに保存されている様子を自分の目で確認したければ、
仮想ディレクトリ直下の「App_Data」フォルダから「ASPNETDB.mdf」を開いてみよう。
aspnet_Profileテーブルを開くと、以下のようにユーザーごとのプロファイル情報が
データベースに保存されていることが確認できるはずだ。


[匿名ユーザの設定]
1. 匿名ユーザーの識別を有効にする
匿名ユーザーの識別機能(匿名識別)を有効化
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <anonymousIdentification enabled="true" />
    ……中略……
  </system.web>
</configuration>

2.プロファイルを削除する
匿名ユーザはCookieで紐付けられる為、クライアント側でCookieを削除すると
プロファイルとの関連付けがなくなってしまいゴミとして残ってしまう
このゴミプロファイルは以下のコマンドで定期的に掃除する

SqlProfileProvider provider =
  (SqlProfileProvider)Profile.Providers["AspNetSqlProfileProvider"];
provider.DeleteInactiveProfiles(
  ProfileAuthenticationOption.Anonymous, DateTime.Now.AddMonths(-3));

http://www.atmarkit.co.jp/fdotnet/dotnettips/483aspprofile1/aspprofile1.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/486aspprofile2/aspprofile2.html

 


PAGE TOP