2006年09月08日

Atlasを使用したブログパーツ

 よしぶろっ:ブログなどにヤフオクの商品のスライドショーが表示できるブログパーツ

 ASP.NET 2.0とAtlasで作成したブログパーツを公開しました。

 また、このブログパーツで使用しているWebサービスも僕が作成したものです。Yahoo!デベロッパーネットワーク - オークションWebサービス - SOAPで提供されているものだと不足だったのでつくりました。こちらもよかったらご使用下さい。

 Webサービス仕様URL:http://www.yoshimeux.com/yais/YahooAuctionService.asmx?wsdl

 Yahoo IDからYahoo!デベロッパーネットワーク - 出品リストのレスポンスをオブジェクトにしたものを返す関数があります。 
タグ:AJAX ASP.NET

posted by よっしぃ at 18:18 | Comment(0) | TrackBack(0) | ASP.NET

2006年06月30日

ASP.NET 2.0、SQL Server 2005 Express対応の無料ホスティングサービスの日本版

 ASP.NET 2.0、SQL Server 2005 Express対応の無料ホスティングサービスで日本のもので最近オープンされたものがあります。

 ファーストサーバ

 ここのエクスプレスが無料のものです。エクスプレスは先着順のようなので、興味ある方はお早めに登録した方がいいみたいですね。

 ちはみに、私は早速登録しました。

posted by よっしぃ at 23:19 | Comment(0) | TrackBack(0) | ASP.NET

2006年06月19日

ASP.NET 2.0、SQL Server 2005 Express対応の無料ホスティングサービス

 ASP.NET 2.0、SQL Server 2005 Express対応の無料ホスティングサービスということで使用しているWebMatrixHostingがASP.NET 2.0のサイトが動作しない上にサポートもしてくれないので、乗り換え先を探してみました。

 駄目もとで無料のもので探してみたら海外のサービスで2つほど見つけましたのでご紹介。

 FREEWEBDOT.com
 AspSpider.NET

 せっかくなので両方に登録して、使用感を比較してみようかと思います。

 なお、SQL Server 2005 Expressは使えなくてもいいというなら、ASP.NET 2.0対応の無料ホスティングサービスということでAsphost4free.comというサイトもあります。

posted by よっしぃ at 23:19 | Comment(0) | TrackBack(0) | ASP.NET

2006年05月30日

MonoRailのサンプル

 ここからMonoRailのサンプルがダウンロードできます。

 適当な場所に解凍して、Visual Web Developerで[解凍したフォルダ]\HelloMonoRail\WebSiteを開いて、デバッグ開始かデバッグなしで開始をします。

 ディレクトリ一覧(URL:http://localhost:[4桁の数字]/WebSite/)の画面が表示されるので、アドレスバーでHome/index.railsをURLの後ろに入力して、エンターキーを押して下さい。

 「Welcome to your new website.」の画面が表示されれば成功です。

 IISの場合は、仮想フォルダの設定が必要ですが、同様に実行できると思います。


 簡単に解説します。

 http://localhost:[4桁の数字]/WebSite/Home/index.rails でbin/HelloMonoRail.dllのHomeControllerクラスのIndex関数が呼び出されます。HomeControllerクラスのIndex関数の内容は以下のようになっています。

    public void Index()
{
// set a sample variable for the index.vm velocity template to consume.
PropertyBag["creator"] = "Nick Farina";
}

 HomeControllerクラスの基底クラスのCastle.MonoRail.Framework.ControllerのPropertyBagプロパティに値を設定しているだけです。

 表示にはviews/home/index.vmが使われます。index.vmはテンプレートエンジンNVelocityのテンプレートファイルです。index.vmがNVelocityのテンプレートエンジンで処理された結果がWebの出力になります。NVelocityの処理については割愛しますが、index.vm内の$creatorがHomeControllerクラスのIndex関数でPropertyBag["creator"] に設定した「Nick Farina」に変換されます。

 http://localhost:[4桁の数字]/WebSite/Home/index.rails で「This site was created by Nick Farina」と表示されていれば、値の受け渡しがうまくいったということになります。

 HomeControllerクラスにAbout関数を追加して、views/home/about.vmを追加すれば、http://localhost:[4桁の数字]/WebSite/Home/about.rails でアクセスできます。

 bin/HelloMonoRail.dllにLinksControllerクラスを追加して、Index関数を追加し、views/links/index.vmを追加すれば、http://localhost:[4桁の数字]/WebSite/Links/index.rails でアクセスできます。viewsに追加するファイルはindex.aspxにもできますし、クラスライブラリを自作して追加すれば、他のテンプレートエンジンのものにもできます。

 ざっとでしたが、MonoRailをは大まかにはこんなかんじです。英語ですがここにもう少し詳しく書かれています。興味がありましたらご参照下さい。

posted by よっしぃ at 23:19 | Comment(0) | TrackBack(0) | ASP.NET

2006年03月30日

Atlasのバインディングのサンプル

 Atlasでバインディングを使用するサンプルをここに公開しました。
 ソースを見ただけだとわからない部分も多いと思うので、説明させていただきます。Atlasは、2006 March CTPを使用しています。
 
 サンプルのサイトのファイル構成は以下のようになっています。

AtlasBindingSample
│   Default.aspx
│   Default.aspx.cs
│   eula.rtf
│   readme.txt
│   SupportService.asmx
│   Web.config
│   
├───App_Code
│       Converter.cs
│       KeyValueElemnt.cs
│       SupportService.cs
│       
├───App_Data
└───Bin
        Microsoft.Web.Atlas.dll

 まず、Web.Configですが、ドロップダウンリストで表示するデータが以下のように設定してあります。ASP.NET 1.1でお馴染みのSystem.Configuration.NameValueSectionHandlerを使うものです。
 
  <genre>
<add key="conveni" value="コンピニ"/>
<add key="famires" value="ファミレス"/>
<add key="fastfood" value="ファーストフード"/>
</genre>
<conveni-links>
<add key="http://www.sej.co.jp/index.html" value="セブンイレブン"/>
<add key="http://www.family.co.jp/" value="ファミリーマート"/>
<add key="http://www.lawson.co.jp/" value="ローソン"/>
</conveni-links>
<famires-links>
<add key="http://www.skylark.co.jp/skylark/index.html" value="すかいらーく"/>
<add key="http://www.dennys.co.jp/dj/index.html" value="デニーズ"/>
<add key="http://www.jonathan.co.jp/home/index.asp" value="ジョナサン"/>
</famires-links>
<fastfood-links>
<add key="http://www.mcdonalds.co.jp/" value="マクドナルド"/>
<add key="http://www.mos.co.jp/index.html" value="モスバーガー"/>
<add key="http://www.kfc.co.jp/" value="ケンタッキーフライドチキン"/>
</fastfood-links>
?の間に
 
   <section name="genre" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,& Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<section name="conveni-links" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<section name="famires-links" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<section name="fastfood-links" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

と設定してあるので、(NameValueCollection)ConfigurationSettings.GetConfig("genre")で?内の項目がSystem.Collections.Specialized.NameValueCollectionで取得できます。

 それをAtlas.Sample.Binding.Converter.ToListSystem.Collections.Generic.List<Atlas.Sample.Binding.KeyValueElemnt<string, string>>に変換しています。ジェネリックの説明については省きますがAtlas.Sample.Binding.KeyValueElemnt<TKey, TValue>System.Collections.Generic.KeyValuePairと殆ど同じものと思って下さい。今回のサンプル作成において、System.Collections.Generic.KeyValuePairではうまくいかなかった部分があったので作成しました。

 初期表示の段階でデータをドロップダウンリストに設定している部分が、Default.aspx.cs内のPage_Load関数内の
 
            Genre.DataSource = Converter.ToList((NameValueCollection)ConfigurationSettings.GetConfig("genre"));
Genre.DataBind();
Links.DataSource = Converter.ToList((NameValueCollection)ConfigurationSettings.GetConfig(this.Genre.SelectedValue + "-links"));
Links.DataBind();

の部分になります。ここも特に目新しい部分ではないので説明はしません。

 なお、ドロップダウンリストは、Default.aspx内で、
 
       <asp:DropDownList ID="Genre" runat="server" DataTextField="Value" DataValueField="Key" OnChange="Genre_OnChanged();"></asp:DropDownList>
<asp:DropDownList ID="Links" runat="server" DataTextField="Value" DataValueField="Key"></asp:DropDownList>
と宣言されています。

 今回のサンプルではバインディングの例以外にもAtlasを使っている部分があります。分類(Genre)のドロップダウンの値によって、名称(Links)のドロップダウンの内容が変わる部分です。JavaScriptでWebサービスを使用して<……-links>〜</……-links>のデータを取得して、ドロップダウンリストに設定しているだけですが、Webサービスを使用する部分以外にもAtlasの機能を使っています。まずは、その部分を紹介させていただきます。

 まず、Default.aspxの<script type="text/xml-script">〜</script>の部分に注目します。これもAtlasのXML Scriptという機能の部分です。
 その中の<components>〜</components>内の

               <select id="Genre"/>
<select id="Links" valueProperty="Key" textProperty="Value"/>


という部分がドロップダウンリストの処理の部分で必要なところです。この宣言で、初期表示の段階でAtlasで提供されるJavaScriptのクラスのSys.UI.Selectクラスのインスタンスを作成してくれます。

 idで対象としたいドロップダウンリストのIDの値を指定できます。January 2006 ReleaseではtargetElementだった部分なので、January 2006 Releaseから使用している人には注意が必要な部分です。さらに項目を追加すればプロパティの設定も行ってくれます。
 の「valueProperty="Key" textProperty="Value"」の部分がそれにあたります。
 これは、DropDownListクラスの「DataTextField="Value" DataValueField="Key"」と同じ意味を持つと思ってもらっていいです。データを展開するときに使用します。

 初期表示で作成されたインスタンスをJavaScript内でどう取得できるかというと、$(……).controlでできます。$(……)は以前も説明しましたが、document.getElementById(……)と同じ意味になります。
 「ID="Genre"」のものが取得したければ、$("Genre").controlとします。
 
 $("Genre").controlは、分類(Genre)のドロップダウンリストの選択値を取得する部分で使っています。
 Sys.UI.SelectクラスにはselectedValueという選択値を表すプロパティがあって、コード上で取得する場合は、get_selectedValue()で取得できます。
 蛇足ですが、設定する場合は、set_selectedValue(value)となります。

 Default.aspxの<script type="text/javascript" language="JavaScript">〜</script>の内のGenre_OnChanged関数の

     var genreValue = $("Genre").control.get_selectedValue();

の部分が実際に使用している部分です。

 Genre_OnChanged関数の中では、そうやって取得した分類(Genre)の選択値をWebサービスの関数の引数に渡しています。
 呼び出しているWebサービスのAtlas.Sample.Binding.SupportService.GetLinks関数はWeb.configから<……-links>〜</……-links>のデータをSystem.Collections.Generic.List<Atlas.Sample.Binding.KeyValueElemnt<string, string>>にして返しているだけです。引数の値によって、どの名称(Links)のデータが返るかが違うだけです。

 そのWebサービスから取得したデータを設定しているのがonSearchComplete関数内の部分です。ここで、$("Links").controlを使用しています。Sys.UI.SelectクラスにdataというSystem.Web.UI.WebControls.DropDwonListでいうDataSourceと同じ意味のプロパティがあってそれに「$("Links").control.set_data(results)」として、Webサービスが返してきたデータを設定しています。

 この時に、「valueProperty="Key" textProperty="Value"」が使われて、System.Web.UI.WebControls.DropDwonListで「DataTextField="Value" DataValueField="Key"」が設定されている場合と同じようなデータバインドの動きが行われます。
 この部分も今回のサンプルで紹介したかった部分です。

 最後に肝心のバインディングの部分です。今回のサンプルはアンカー(<a ……>〜</a>)にバインディングを設定しています。
 Default.aspxの<script type="text/xml-script">〜</script>の<components>〜</components>内の

                <hyperLink id="Anchor">
<bindings>
<binding dataContext="Links" dataPath="selectedValue" property="text"/>
<binding dataContext="Links" dataPath="selectedValue" property="navigateURL"/>
</bindings>
</hyperLink>

の部分がその設定をしている部分です。アンカーは

     

と宣言されています。

 dataContextは参照元を表し、dataPathはその参照元のどのプロパティを参照するかを指定します。
 「dataContext="Links" dataPath="selectedValue"」で$("Links").controlのselectedValueプロパティを参照元とするということです。今回のサンプルだと名称(Links)の選択値のチェーンのサイトのURL(例:セブンイレブンのサイトのURL http://www.sej.co.jp/index.html)ということになります。

 propertyは参照元の値を参照先のどこに設定するかということですAtlasSys.UI.HyperLinkクラスにはアンカーの表示文字を表すtextというプロパティとリンク先(<a href="……"の部分)を表すnavigateURLプロパティというものがあって、名称(Links)の選択値をそのそれぞれに設定するということです。

 名称(Links)を変更するとアンカーの文字とリンク先が同時に変わります。

 設定されているものが

                <hyperLink id="Anchor">
<bindings>
<binding dataContext="Links" dataPath="selectedValue" property="navigateURL"/>
</bindings>
</hyperLink>

となっていば、文字はそのままでリンク先だけがかわります。どちらの場合も当然ポストバックは発生しません。

 これがAtlasのバインディングというものです。参照元の値は文字列でなくbool値であっても構いません。チェックボックスのチェック状態によって、文字や入力項目を表示・非表示したりするのにも使えます。

 とても面白い機能だと思います。バインディング以外にも<script type="text/xml-script">〜</script>の<components>〜</components>の部分の宣言とかも便利だと思います。そのお陰で、今回のサンプルも動きの割りにコードが少ないと思います。

 Atlasって、使いこなすととても便利だと思うので、是非チャレンジしてみてくれると嬉しいです。
 今回のサンプルは盛り沢山の反面、わかりづらい部分も多いと思います。その場合は是非質問をお願いします。自分の勉強にもなりますので。
タグ:ASP.NET AJAX

posted by よっしぃ at 23:19 | Comment(0) | TrackBack(0) | ASP.NET

2006年03月28日

ASP.NETのMVCフレームワーク

 ASP.NETのMVCフレームワークで[url=http://www.castleproject.org/index.php/MonoRail]MonoRail[/url]というものがあります。

 まだ、ちょっとしか見れてないですが、かなりよさそうです。
ASP.NETにもMVCフレームワークが必要と思っているので、これを広めていきたいと思っています。

 当然、サンプルの公開とか解説とかも考えていますよ?。
タグ:ASP.NET

posted by よっしぃ at 23:19 | Comment(0) | TrackBack(0) | ASP.NET

2006年03月17日

AtlasでListViewを使用するサンプル

 AtlasでListViewを使用するサンプルをここにアップしました。

解説はあとで書く予定です。
タグ:ASP.NET AJAX

posted by よっしぃ at 23:19 | Comment(0) | TrackBack(0) | ASP.NET

2006年01月16日

ユーザー ストア データベースを作成する

 今更だけど、

 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe

を引数なしで実行するとUIが表示されて、ウィザード形式で作成するデータベースの指定ができます。
タグ:ASP.NET 2.0

posted by よっしぃ at 23:19 | Comment(0) | TrackBack(0) | ASP.NET

2005年11月16日

セキュリティ機能で使用するテーブルなどを指定したデータベースに作成する方法

 ASP.NET 2.0でWebサーバーがセキュリティ機能(メンバーシップや役割の管理など)に使うテーブルやストアドプロシージャーなどは普通~(アプリケーションルート)/App_Data/aspnetdb.mdfに作成されます。

 今紹介する C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215(バージョンによって異なる)\aspnet_regsql.exe を使うと、それを指定したデータベースに作成することができます。

 指定方法は下記のようになります。

  aspnet_regsql -S [ホスト名] -U [SQL Server ログインユーザー名] -P [SQL Serverログインパスワード] -A all -d [データベース名]

 このように実行すれば、指定したデータベースにテーブルなどが作成されます。

 あとは、セキュリティ機能を適用したいアプリケーションのWeb構成ファイルに下記のブロックを追加することで、使用するデータベースを指定できます。

  <connectionStrings>
    <remove name="LocalSqlServer" />
    <add name="LocalSqlServer" 
     connectionString="data source=[ホスト名];
      user id=[SQL Server  ログインユーザー名];
      password=[SQL Server ログインパスワード];
      initial catalog=[データベース名]" />
  </connectionStrings>
 これで、Web Site Administration Toolツールでもこのデータベースを使用してくれます。

 また、下記のようにすると、テーブルなどを作成するSQLスクリプトを作成できます。

  aspnet_regsql -S [ホスト名] -U [SQL Server ログインユーザー名] -P [SQL Serverログインパスワード] -sqlexportonly c:\name.sql -A all -d [データベース名]

 私はこのSQLスクリプトを少し変更して、他のRDBMSで使えるものにできないかと思っていたりします。
タグ:ASP.NET 2.0 tips

posted by よっしぃ at 23:19 | Comment(0) | TrackBack(0) | ASP.NET

2005年11月15日

サーバー処理を実行中にカーソルを待ち状態にする

 サーバー処理を実行中にカーソルを待ち状態にする方法がここで紹介されています。
参考にしてみて下さい。
タグ:tips ASP.NET

posted by よっしぃ at 23:19 | Comment(0) | TrackBack(0) | ASP.NET

2005年11月04日

構成ファイルの値の更新のやり方

 AppSettingsセクションやConnectionStringsセクション以外のセクション内のcustomErrorsセクション(の部分)などの内容の取得や更新、削除もできます。

今回は、それらのセクションの内容の取得や更新、削除の例を紹介します。

 それぞれのセクションには、対応するSystem.Configuration.ConfigurationSection クラスを継承したクラスが定義されています。
 先ほど紹介したcustomErrorsセクションだと、System.Web.Configuration.CustomErrorsSection クラスになります。

 また、ここSystem.Configuration.ConfigurationSection クラスを継承したクラスの一覧を見ることができます。

 この各System.Configuration.ConfigurationSection クラスの子クラスのインスタンスを取得するには、System.Configuration.Configuration クラスGetSection 関数を使用します。

 System.Web.Configuration.CustomErrorsSection クラスのインスタンスを取得するには、ConfigurationSample2というサイトだったとすると下記のコードで取得できます。

  Configuration configuration = WebConfigurationManager
.OpenWebConfiguration("/ConfigurationSample2");

CustomErrorsSection customErrorsSection =
(CustomErrorsSection)configuration
.GetSection("system.web/customErrors");


 さらに
  customErrorsSection.DefaultRedirect = "customerror.htm";
customErrorsSection.Mode = CustomErrorsMode.Off;
customErrorsSection.Errors.Add(new CustomError(404,
"customerror404.htm"));

configuration.Save();


を追加し実行すると、customErrorsセクションが以下のように変更されます。

  <customErrors defaultRedirect="customerror.htm" mode="Off">
<error statusCode="404" redirect="customerror404.htm" />
</customErrors>


 他のセクションも同様に内容の取得や更新、削除ができると思います。
タグ:ASP.NET 2.0 tips

posted by よっしぃ at 18:50 | Comment(0) | TrackBack(0) | ASP.NET

2005年10月24日

Web構成ファイルのAppSettingsセクション、ConnectionStringsセクションの取得や更新、追加のやり方

 ASP.NET 2.0ではWeb構成ファイルの内容の取得だけでなく、追加や更新もできるようになっています。

 Web構成ファイルの内容の取得には、System.Configuration.Configuration クラスを使用します。
 Web構成ファイルのSystem.Configuration.Configuration クラスのインスタンスの取得には、
System.Web.Configuration.WebConfigurationManager クラスを使用します。

 CofigurationSampleというWebサイトがあったとすると、

 Configuration config = 
WebConfigurationManager.OpenWebConfiguration("/CofigurationSample");

で取得できます。

 蛇足ですが、Windowsアプリケーションのアプリケーション構成ファイルのインスタンスの取得は、System.Configuration.ConfigurationManager クラスを使用して、

 Configuration config = 
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

で取得できます。


 Web構成ファイルは、色々なセクションに分かれていますが、今回は、AppSettingsセクション(?の部分)、ConnectionStringsセクション(?の部分)の読み書きの例を説明しようと思います。
 AppSettingsセクションはSystem.Configuration.AppSettingsSection クラスで表されます。
 ConnectionStringsセクションはSystem.Configuration.ConnectionStringsSection クラスで表されます。

 これらは、それぞれSystem.Configuration.Configuration クラスのAppSettingsプロパティ、ConnectionStringsプロパティで簡単に取得できるようになってます。

 AppStringsセクションの項目は、System.Configuration.KeyValueConfigurationElement クラスで表され、System.Configuration.AppSettingsSection クラスのSettingsプロパティで取得できるSystem.Configuration.KeyValueConfigurationCollection クラスのインデクサに項目のキー文字列を指定して取得できます。

 ConnectionStringsセクションの項目は、System.Configuration.ConnectionStringSettings クラスで表され、System.Configuration.ConnectionStringsSection クラスのConnectionStringsプロパティで取得できるSystem.Configuration.ConnectionStringSettingsCollection クラスのインデクサに項目名の文字列を指定して取得できます。


 AppStringsセクションの項目の追加は、System.Configuration.AppSettingsSection クラスの、Settingsプロパティで取得できるSystem.Configuration.KeyValueConfigurationCollection クラスのAddメソッドで行えます。

 ConnectionStringsセクションの項目の追加は、System.Configuration.ConnectionStringsSection クラスの、ConnectionStringsプロパティで取得できるSystem.Configuration.ConnectionStringSettingsCollection クラスのAddメソッドで行えます。

 System.Configuration.Configuration クラスのSaveメソッドを実行するとSystem.Configuration.Configuration クラスのインスタンスの全ての変更がWeb構成ファイルに保存されます。

 Web構成ファイルの内容の取得や更新や追加などはこのようにして行います。下記にサンプルコードを示します。

namespace CofigurationSample
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, System.EventArgs e)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration("/CofigurationSample");

config.AppSettings.Settings.Add("Hello", "World");
config.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings("ConnectionString",
"LocalSqlServer: data source=127.0.0.1;Integrated Security=SSPI;" +
"Initial Catalog=aspnetdb", "System.Data.SqlClient"));

config.Save();

config = WebConfigurationManager.OpenWebConfiguration("/CofigurationSample");
this.Label1.Text = config.AppSettings.Settings["Hello"].Value;
this.Label2.Text = config.ConnectionStrings.ConnectionStrings["ConnectionString"].ConnectionString;
}

override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}

private void InitializeComponent()
{
}
}
}

このコードの実行で、Web構成ファイルに

  <appSettings>
<add key="Hello" value="World" />
</appSettings>
<connectionStrings>
<add name="ConnectionString" connectionString="LocalSqlServer: data source=127.0.0.1;Integrated Security=SSPI;Initial Catalog=aspnetdb"
providerName="System.Data.SqlClient" />
</connectionStrings>

が追加され、ページに

 World
LocalSqlServer: data source=127.0.0.1;Integrated Security=SSPI;Initial Catalog=aspnetd

が表示されます。
タグ:ASP.NET 2.0

posted by よっしぃ at 00:00 | Comment(0) | TrackBack(0) | ASP.NET

2005年09月07日

System.Web.Compilation.ExpressionBuilderクラスの簡単なサンプル

 ASP.NET 2.0で構成ファイルの値を取得できる構文のところで名前だけ出てきていたSystem.Web.Compilation.ExpressionBuilder クラスがある程度わかってきたました。とりあえず、とても簡単なサンプルを紹介させていただきます。

 まず、ExpressionBuilderTestというWebサイト(Webプロジェクト)を作成します。
 MyExpressionBuilder.csというファイルを追加し、
まず、System.Web.Compilation.ExpressionBuilderを継承したクラスMyExpressionBuilderをつくります。

 MyExpressionBuilderのコードは以下のようになります。

MyExpressionBuilder.cs
  using System;
using System.CodeDom;
using System.Web.UI;
using System.ComponentModel;
using System.Web.Compilation;
using System.Web.UI.Design;

// ExpressionEditorAttributes to allow the
// expression to appear in the designer
[ExpressionPrefix("MyCustomExpression")]
[ExpressionEditor("MyCustomExpressionEditor")]
public class MyExpressionBuilder : ExpressionBuilder
{

public override CodeExpression GetCodeExpression(
BoundPropertyEntry entry, object parsedData,
ExpressionBuilderContext context)
{
return new CodePrimitiveExpression("Foo");
}
}

続いて、Web構成ファイル(Web.config)を追加し、

  <system.web>
<compilation>
・・・・・・・・
</compilation>
</system.web>

の部分に

  <expressionBuilders>
<add expressionPrefix="MyCustomExpression"
type="MyCustomExpressionBuilder"/>
</expressionBuilders>

を追加し、

  <system.web>
<compilation>
<expressionBuilders>
<add expressionPrefix="MyCustomExpression"
type="MyCustomExpressionBuilder"/>
</expressionBuilders>
</compilation>
</system.web>

とします。

あとは、Webページで、

  <asp:Literal id="Literal1" runat="server" 
Text="<%$ MyCustomExpression:Hello %>" />

とすると、

 Foo

と表示されます。

CodeExpression関数では、System.CodeDom.CodeExpression クラスというものを作成して返すようなっています。

 System.CodeDom.CodeExpression クラスは簡単に言うと、プログラムのコードをクラスで表したものというかんじでしょうか。
 CodePrimitiveExpression クラスは、リテラルの表現を表すクラスです。

 new CodePrimitiveExpression(1)
なら

  1

  new CodePrimitiveExpression("Foo")
なら

  "Foo"

  new CodePrimitiveExpression(true)
なら

  true

など、数字型、文字列型、Boolean型などを表現します。

 今回は、new CodePrimitiveExpression("Foo")を返しているので、"Foo"となり、さらにそれが評価されてFooとなったわけです。
new CodePrimitiveExpression("Foo")の"Foo"の部分に適当な値を渡してあげれば、それが表示されます。当然、CodeExpressionの引数の値も使用できますし、System.CodeDom.CodeExpression クラスの様々な派生クラスを使用すれば、さらに複雑な表現も作成できます。
 System.Web.Compilation.ExpressionBuilder クラスのコードサンプルでは関数呼び出しの表現を作成しているので、興味があったら参照してみて下さい。
タグ:ASP.NET 2.0 tips

posted by よっしぃ at 14:07 | Comment(0) | TrackBack(0) | ASP.NET

2005年08月10日

ASP.NET 2.0の日本語ドキュメント

 ASP.NET 2.0の日本語ドキュメントも随分豊富になってきました。

 GridView、SqlDataSourceなどについての説明もあります。興味があればコチラをご参照下さい。
タグ:ASP.NET 2.0

posted by よっしぃ at 23:45 | Comment(0) | TrackBack(0) | ASP.NET

2005年08月09日

ASP.NET 2.0で構成ファイルの値を取得できる構文

 ASP.NET 2.0には新しい構文が追加されています。

<%$ 〜 %>
というものです。

 これで、AppSettingsやConnectionStrings(ASP.NET 2.0から追加)などで設定した値が取得できます。

Web.configに、
 <appSettings>
<add key="Hello" value="World!" />
</appSettings>
とあれば、

<%$ AppSettings:Hello %>

  <connectionStrings>
<add name="Pubs" connectionString="Server=(local)SQLExpress;Integrated
Security=True;Database=pubs;Persist Security Info=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
とあれば、

<%$ ConnectionStrings:Pubs %>
で、

World!

Server=(local)SQLExpress;Integrated Security=True;Database=pubs;Persist Security Info=True

がそれぞれ取得されます。

 ただ、直に書くことはできず、
   <asp:Literal id="Literal1" runat="server" Text="<%$ AppSettings:Hello %>" />

  <asp:GridView ID="GridView1" DataSourceID="SqlDataSource1" runat="server"/>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
SelectCommand="SELECT [au_id], [au_lname], [au_fname] FROM [authors]"
ConnectionString="<%$ ConnectionStrings:Pubs %>" />
(GridView、SqlDataSourceは、ASP.NET 2.0から追加)
のなどの形で使用します。

 また、System.Web.Compilation.ExpressionBuilder クラスを継承したクラスを使って、構成ファイル以外の値も取得するようにできるようです。
 これも紹介したかったのですが、少し調べてみたかんじだと時間がかかりそうだったのでやめておきました。
タグ:ASP.NET 2.0 tips

posted by よっしぃ at 19:04 | Comment(0) | TrackBack(0) | ASP.NET

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。