T3-333 ASP.NET 2.0 新機能 詳細 (パート2) マイクロソフト株式会社 ビジネスパートナー営業本部 SE部 第1グループ 平井昌人 Agenda パート1 8/4(Thu) 14:55@RoomA What's New 管理機能 開発環境 データアクセス マスターページ サイトナビゲーション パート2 8/5(Fir) 9:00@RoomA スキン&テーマ メンバシップ パーソナライゼーション キャッシング サーバーコントロール その他いろいろ テーマ & スキン テーマ& スキン ~ ページのルック&フィールを柔軟に変更する仕組み ~ 既定のページ テーマフォルダ App_Theme フォルダ 「テーマ名 = サブフォルダ」 というルール 各テーマフォルダ内のファイル スキンファイル(*.skin) : Web コントロール スタイルシート(*.css) : HTML要素 テーマの適用 テーマを適用するだけで外観を変更! 春バージョン 夏バージョン 秋バージョン <%@ Page Theme="summer" Language= 冬バージョン ページ単位の適用 ディレクティブ Theme プロパティ サイト全体の適用 Web.config スタイルの適用順 ~ スタイルシート → プロパティ → テーマ ~ スタイルの適用順 スタイルシートテーマ <%@ Page StyleSheetTheme = "MyStyle" リンクスタイルシート / インラインスタイル <link href = "StyleSheet.css" ... <Style> input {background-color:red} </Style> テーマ:スタイルシート <%@ Page Theme = "MyTheme" コントロールのプロパティ <asp:TextBox ID="TextBox1" BaclColor="Red" テーマ:スキンファイル <%@ Page Theme = "MyTheme" プログラムでの指定 TextBox1.BackColor = Color.Red TextBox1.Style.Add("background-color", "red") スタイルシート (~.css) HTML 要素に適用 スタイル指定のないサーバー コントロールにも適用 body { background-color:cyan } input { background-color:red } スキンファイル (~.skin) サーバーコントロールのスタイル に適用 <asp:Image runat="server" ImageUrl="default.gif" /> <asp:TextBox runat="server" BackColor="Red" /> 動的なテーマの変更 ~ テーマの変更は Page_PreInit イベントで ~ テーマの動的な変更 : PreInit イベント & Theme プロパティ Protected Sub Page_PreInit(...) Handles Me.PreInit Me.Page.Theme = Server.HtmlEncode(Request.QueryString("Theme")) Me.Page.Theme = ConfigurationManager.AppSettings("DefaultTheme") End Sub サイト全体のテーマ "Web.config" に記述 <system.web> <pages theme="default" /> </system.web> 同じコントロールで違うスタイル : SkinID プロパティ スタイルシートの class, CssClass プロパティと同じ概念 <asp:label runat="server" forecolor="black" /> <asp:label runat="server" forecolor="green" SkinID="GREEN" /> <!-- .skin --> <asp:Label ID="Label1" runat="server" Text="黒"></asp:Label> <!-- .aspx --> <asp:Label ID="Label2" runat="server" Text="緑" SkinID="GREEN" ></asp:Label> テーマ適用の防止 コントロールごとに False を設定 : EnableTheming プロパティ メンバシップ メンバシップ ~ ユーザー管理を簡素化するアプリケーションサービス ~ ASP.NET Membership Service Login Controls Login CreateUserWizard LoginName Membership MembershipUser Membership Provider web.config SqlMembershipProvder SQL Server LoginView PasswordRecovery LoginStatus Membership API ChangePassword SQL Server Express Custom Provider Other Databases machine.config Membership Data Store メンバシップ データベースの設定 ~ "aspnet_regsql" ツール ~ SQL Server上に空のデータベースを作成しておく "aspnet_regsql" ツールでウィザードを起動 データベースを指定するだけ テーブル、ビュー、ストアドプロシージャ が自動生成される SQL Server c:¥> aspnet_regsql 管理用テーブル データベース選択 メンバシップの有効化 ~ 『Webサイト管理ツール』で簡単設定 ~ 『Webサイト管理ツール』 プロバイダの選択 『セキュリティ設定ウィザード』 アクセス方法の選択 ロールの定義 ユーザーの追加 新しいアクセス規則の追加 "Web.config"と データベースに反映 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <roleManager enabled="true" /> <authentication mode="Forms" /> </system.web> </configuration> Web.configへ反映 DBへ反映 メンバシップ プロバイダ ~ 既定のプロバイダ : SqlMembershipProvider ~ 設定 <membership defaultProvider="AspNetSqlMembershipProvider"> <providers> <add name="AspNetSqlMembershipProvider" connectionStringName="LocalSqlServer" enablePasswordRetrieval="[true|false]" enablePasswordReset="[true|false]" requiresQuestionAndAnswer="[true|false]" applicationName="/" requiresUniqueEmail="[true|false]" passwordFormat="[Clear|Encrypted|Hashed]" maxInvalidPasswordAttempts="5" passwordAttemptWindow="10" passwordStrengthRegularExpression="" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" type="System.Web.Security.SqlMembershipProvider, System.Web, ... </providers> </membership> 独自プロバイダ Membership クラスを継承して作成 ログインコントロール ~ ユーザー管理のほとんどがプログラムレスで実現 ~ Login ユーザー名、パスワードを入力する標準的なUI CreateUserWizard 新規ユーザー登録のための UI を提供 LoginView 1つのページでビューを変更 匿名、ログイン済、ロール別 に個別の UI を持てる PasswordRecovery メール(SMTP)で通知 文面のカスタマイズも可能 "Web.config"に<mailSettings> <smtp>セクションを追加 パーソナライゼーション パーソナライゼーション ~ ユーザー情報(プロファイル)管理のためのサービス ~ ASP.NET Profile Service Profile Scheme Web.config <profile enabled="true"> <properties> <add name="MyProp1" type="System.String" defaultValue="foo" /> <add name="MyProp2" type="int" defaultValue="123"/> </properties> </profile> Profile API ProfileBase ProfileCommon Profile Provider web.config SqlProfileProvider SQL Server SQL Server Express Custom Provider Other Databases machine.config Profile Data Store プロファイルの定義と利用 ~ "Web.config" に<Profile>セクションを追加 ~ プロファイルの定義(Web.config) 既定値 <profile enabled="true"> プロパティ <properties> <add name="NickName" type="System.String" defaultValue="Unkown"/> <add name="BirthDay" type="System.DateTime"/> <group name="Home"> <add name="Address" type="System.String"/> <add name="Phones" type="System.Collections.ArrayList"/> </group> </properties> グループ化 シリアライス可能なデータ型 </profile> プロファイルの利用 Profile クラス 通常のプロパティと同じ Profile.NickName = "ジニアス平井" Profile.BirthDay = DateTime.Parse("1964/04/26") Profile.Home.Address = "xxxxx" Profile.Home.Phones.Add("000-000-0000") タイプセーフ Profile.Home.Phones.Add("111-111-1111") インテリセンス 匿名ユーザーのプロファイル ~ ログインせずとも個別化が可能 ~ 匿名ユーザーのプロファイル クライアント Cookie に一意の ID を提供 "Web.config"での定義 <anonymousIdentification> と allowAnonymous を追加 定期的にプロファイルを清掃 aspnet_profile テーブル 独自クラスの利用 シリアライズ可能なクラス [App_Code]フォルダに配置 "Web.config"での定義 serializeAs="Binary"を追加 <add name="Employee" type="Employee" serializeAs="Binary"/> <anonymousIdentification enabled="true"/> <profile enabled="true"> <properties> <add name="HandleName" type="System.String" allowAnonymous="true" /> </properties> </profile> <Serializable()> _ Public Class Employee Private pID As Integer Public Property ID() As Integer Get Return pID End Get Set(ByVal value As Integer) pID = value End Set End Property End Class キャッシング ディスク アウトプットキャッシュ ~ メモリ内のキャッシュデータをディスクに退避させる仕組み ~ IIS, アプリケーションを再起動してもキャッシュが有効 常にディスクに保存されるわけではない メモリ要件、使用状況、再起動時など必要に応じてディスクに退避 path で指定したフォルダの下に diskchche フォルダが作成 "Web.config"の設定 有効・無効 パス 最大サイズ ページディレクティブの設定 <caching> <!-- Web.Config --> <outputCache> <diskCache enabled="true" path="c:¥tmp" maxSizePerApp="2"/> </outputCache> </caching> <%@ OutputCache Duration="10" DiskCacheable="true" VaryByParam="none" %> Cache API SetSlidingExpiration メソッドで有効期間をスライディング Duration で指定した期間内にアクセスされた場合、その時点からさらに Duration 分を延長する効果的な機能 データベース キャッシュ ~ データベースの変更時にキャッシュをクリアさせる ~ Polling ベース : SQL Server 7.0 / 2000 "asp_regsql.exe" で該当DBとテーブルを有効化 C:¥> aspnet_regsql -S "(local)" -E -ed -d "MyDB" -et -t "MyTable" "Web.config"を設定 ページキャッシュ <sqlCacheDependency enabled="true"> <databases> <add name="MyDB" connectionStringName="CON_STR" pollTime="10000" /> </databases> </sqlCacheDependency> <%@ OutputCache SqlDependency="MyDB:MyTable" データキャッシュ (コントロール) DataSource.SqlDependency = "MyDB:MyTable" IIS キャッシュ Notification ベース : SQL Server 2005 テーブルの変更時に通知される SqlDependency="CommandNotification" データの変更 でキャッシュ をクリア データの変更 SQL Server フラグメントキャッシュ ~ ページキャッシュでその一部を動的なコンテンツにする ~ 指定部分をページキャッシュから除外 1.x では動的な箇所をユーザーコントロールで代替 フラグメントキャッシュを 有効にする方法 static(Shared)なコール バックメソッドを用意 Substitution コントロール WriteSubstitution メソッド Web Server ABC Client ASP.NET ABC キャッシュ から XYZ XYZ XYZ マージ Protected Sub Page_Load(ByVal sender ... Label1.Text = System.DateTime.Now Substitution1.MethodName = "Foo" Response.WriteSubstitution(New HttpResponseSubstitutionCallback(AddressOf Foo)) End Sub Shared Function Foo(ByVal context As HttpContext) As String Return System.DateTime.Now.ToLongTimeString() End Function サーバーコントロール MultiView & View コントロール ~ 1つのページ内で複数のビューを提供 ~ プロパティページのタブ切替のようなオペレーションを提供 マスター/詳細の切替や入力項目が多いエントリ画面など提供する情報量 が多い場合にそれらをカテゴライズ MultiView コントロールに複数の View コントロールを配置 常にペアで利用する 表示するビューは ActiveViewIndex プロパティで制御 MultiView.ActiveViewIndex = -1 で非表示も可能 単一の aspx で複数のページを管理する View 内のコントロールへのアクセス方法は同じ ページ遷移などでのセッション管理が不要 login.aspx MultiView Control View1 View2 login.aspx Wizard コントロール ~ 複数ページによる一連の処理を1つのページで実現する ~ 論理的な一連の流れをもつ関連ページをまとめる ページ(aspx)は1つで OK 順番が定義された多段階フォーム 開始画面から確認、完了画面までを制御 ユーザーによる途中ページへのアクセス防止 WizardStepによるステップ管理 WizardStep = 個々のページ StepType プロパティ Auto : Start / Step / Finish / Complete 自動 : 開始 / Step1 / 確認 / 完了 Wizard Control WizardStep1 : 商品選択 NewOrder.aspx 商品選択 NewOrder.aspx 発送先入力 NewOrder.aspx 確認画面 WizardStep2 : 発送先入力 WizardStep3 : 確認画面 NewOrder.aspx WizardStep4 : 登録画面 登録画面 Validation コントロール ~ 検証対象コントロール群のグループ化が可能 ~ ValidationGroup プロパティ ValidationGroup = "A" 検証コントロールのグループ化 送信ボタン(sumbit)が複数あるフォームで 効果あり 1.x では CauseValidation プロパティのある ボタン系コントロールのみだった SetForcusOnError プロパティ バリデーションエラーが発生した コントロールに自動フォーカス エラー箇所に フォーカス移動 ただしエラーメッセージと発生した コントロールの位置関係に注意 CultureInvariantValues プロパティ 各国の書式に対応したバリデーション ValidationGroup = "B" 2005/01/01 でも 01/01/2005 でも OK となる CompareValidator の ValueToCompare や RangeValidator の MaximumValue / MinimumValue に有効 その他 クロスページ ポストバック ~ 自分自身でなくても OK ~ ポスト先の URL を変更可能 CLIENT SERVER IE に表示される URL も変更される PostBackUrl プロパティで指定 Page1.aspx Server.Transfer メソッド不要 PreviousPageType ディレクティブ ポスト先でもタイプセーフ Page2.aspx PreviousPage プロパティで前ページ参照 <!-- Page1.aspx --> <asp:Button ID="Button1" runat="server" PostBackUrl="~/Page2.aspx" Text="送信"/> '' Page2.aspx.vb Protected Sub Page_Load(ByVal ... If Page.IsCrossPagePostBack Then Label1.Text = CType(Page.PreviousPage.FindControl("TextBox1"), TextBox).Text Me.Header.Title = Page.PreviousPage.TextBox1.Text End If End Sub クライアントコールバック ~ ブラウザベースで非同期処理なるものを実現 ~ XML-HTTP でサーバーとの通信を行う CLIENT 対応ブラウザ SERVER Script ポストバックを使用しない チラツキ防止 帯域の節約 パフォーマンス向上 ASP.NET IE 5.0以降、NS 6.0以上、… SupportsXmlHttp と SupportsCallback をチェック ICallbackEventHandler.RaiseCallbackEvent メソッドを定義 Public Function RaiseCallbackEvent(ByVal ea As String) As String Implements ICallbackEventHandler.RaiseCallbackEvent Return "Hello" End Function <script language="javascript"> function ClientCallback(result, context){ document.forms[0].elements['TextBox1'].value = result; } function ClientCallbackError(result, context){ alert(result); } </script> その他いろいろ ~ 細かいところにまで改良が加えられている ~ ページヘッダの操作 Page.Headrer から アクセス可能 タイトルやMetaデータの 追加・変更など Dim meta As New HtmlMeta() meta.HttpEquiv = "REFRESH" meta.Content = "2" Page.Header.AddParsedSubObject(meta) Page.Header.Title = Now.ToLongTimeString() <%$ ....... %> Expression シンタックス コンテンツ内で 構成ファイルやリソースにアクセスするための書式 <asp:SqlDataSource ID="SqlDataSource1" ConnectionString='<%$ connectionStrings:MyDB %>' runat="server" /> <asp:Label ID="Label1" Text='<%$ Resources:WelcomeMessage %>' /> プリコンパイル (aspnet_compiler) 実行時エラーを未然に防ぐ コードおよび ASPX の隠蔽 (空のaspxファイルとDLLだけ) 初回起動時のパフォーマンス向上 ※ c:¥>aspnet_compiler -v /demo -p "c:¥demo" "c:¥Inetpub¥wwwroot¥demo" -f おわりに 関連セッション T3-330 「64bit環境における.NET Frameworkアプリケーションの開発」 T3-332 「ASP.NET 2.0 新機能 詳細 (パート1)」 T2-315 「VS 2005とASP.NET 2.0を利用したWebサービスの開発」 T3-334 「IIS 6.0とASP.NETによるセキュアなWebサーバーの構築と運用」 T3-382 「ASP.NET 2.0におけるWeb パーツ開発」 技術情報リソース ASP.NET Community Site http://www.asp.net/ ASP.NET 2.0 Quickstart Tutorial http://beta.asp.net/QuickStartv20/aspnet/ ASP.NET Developer Center http://msdn.microsoft.com/asp.net/ http://www.microsoft.com/japan/msdn/asp.net/ http://msdn.microsoft.com/asp.net/beta2/default.aspx Summary ASP.NET 2.0 は、多くのカスタマーからのフォードバック をもとに改良を加え、また数々の新機能やサービスを取 り入れました。定型的な処理に関しては、そのほとんどが プログラムせずに実現できるようになっています。もちろ ん、各新機能の API を利用して高度にカスタマイズする ことも引き続き可能です。また、管理・運用面での強化も 図られており、ASP.NETは新たなレベルでの進化を成し 遂げたと言えます。 ASP.NET 2.0 を利用した Web ソリューションがみなさま のビジネスのお役に立てることを心より願っております。 T3-333 ASP.NET 2.0 新機能 詳細 (パート2) 皆様のフィードバックを! セッションアンケートに御協力下さい。 Thanks for Attending ! © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
© Copyright 2024 Paperzz