ロブ・ハワード
子供の頃、私は毎年数週間を大家族と過ごしていました。アメリカの少年だった私は、故郷のテキサス州ダラスでは見たことがなかったオランダの電車に魅了されました。いとこたちは私をボートに乗せて通過する電車を見に行かせてくれました。線路近くの水辺に座っていると、線路を横切る穏やかな汽笛のように、列車が近づいてくる音が聞こえ、列車が通過するときにゆっくりとしたクライマックスが流れます。 ASP.NET 2.0 について考えるとき、私はこのことを思い出さずにはいられませんでした。 ASP.NET 2.0 の完成は非常に近づいており、私たちのほとんどがそのリリースを待ち望んでおり、リリースの「うーん」という声がますます大きくなり続けています。そうすれば、ソフトウェアの作成方法も再び変わります。
Microsoft の ASP.NET 2.0 の目標は、開発者に 50% のパフォーマンスを提供することです。ただし、実際のパフォーマンスの向上は予想を上回っているようです。新しいパーソナライゼーション、メンバーシップ、ロール管理機能により開発者の負担が軽減され、データ バインディングなどの他の機能も簡素化されます。たとえば、おなじみの、現在もサポートされている構文:
<%# DataBinder.Eval (Container.DataItem, "FirstName") %>
ASP.NET 2.0 では、次のように簡略化できます:
<%# Eval("FirstName") %>
印象的な新機能がたくさんあるだけでなく、意味のあるサーバー コントロールもたくさんあります。 ASP.NET プログラミング モデルは、<ASP:login> コントロールや新しいデータ ソースおよびデータ コントロール サーバー コントロールなどのサーバー コントロールとメンバーシップの統合により、ASP.NET 2.0 でさらに強力になります。
ASP.NET 2.0 では System.Web クラス ライブラリの数がほぼ 2 倍になり、雑誌のコラムが必要になるほど取り上げられています。これらの変更の範囲を真に理解するには、新しい ASP.NET 2.0 の本が必要になります。ここでは、ASP.NET 2.0 のより重要な新機能のいくつかを紹介するいくつかのコラムを書く予定です。今月は、ナビゲーションとページ フローに焦点を当て、まず人気の機能である他のページに送信する機能から始めます。
ページ間配信
ASP.NET に移行する開発者から聞いた最大の不満は、ASP.NET ページは単一の <form> を持つことができ、HTTP ポストバックは自分自身にのみ行えるため、すべての処理がすべてのロジックで実行されるということです。このページ。
多くの開発者、特に ASP に精通していて <form> 要素の制御を好む開発者は、ASP では <form> にコンテンツ データ (HTTP Post または HTTP Get) を送信する場所と方法を指示できることを知っているでしょう。同じページ <フォーム> の数量。ただし、ASP と比較すると、ASP.NET ではページに <form runat=server> を 1 つだけ持つことができ、ページ自体にポストバックすることしかできません。これは非常にイライラする可能性があります。ASP.NET 2.0 の他のページに送信される内容の例を次に示します。
<%@ Page MasterPageFile="~/Site.master" Language="C#"
コードファイル = "ソース.aspx.cs"
継承="ソース" %>
<ASP:コンテンツ ID="メインコンテンツ"
ContentPlaceHolderID="メイン" Runat="サーバー">
あなたの名前を入力してください:
<ASP:TextBox ID="NameBox" Runat="server"></ASP:TextBox>
<ASP:Button ID="Button1" Runat="server" Text="Submit" />
</ASP:コンテンツ>
マスター ページは、<ASP:content> ブロックとユーザー入力を受け入れるいくつかのサーバー コントロールを備えたページ レイアウトを制御するために使用されます。
コンテンツを別のページに渡す場合は、次のようなサーバー コードを使用できます。
Response.Redirect("Target.aspx?Name= " +
HttpUtility.UrlEncode(NameBox.Text));
このテクノロジの問題は、ユーザーが送信ボタンをクリックすると、サーバーが要求を受け入れ、ブラウザを Target.aspx にリダイレクトする応答を送信することです。このような単純な問題によって、多くの作業が行われることになります。
作業は簡略化できるのでしょうか? ASP.NET 2.0 では、答えは「はい」です。次に、改善されたコードを示します:
<%@ Page MasterPageFile="~/Site.master" Language="C#"
コードファイル = "ソース.aspx.cs"
継承="ソース" %>
<ASP:コンテンツ ID="メインコンテンツ"
ContentPlaceHolderID="メイン" Runat="サーバー">
あなたの名前を入力してください:
<ASP:TextBox ID="NameBox" Runat="server"></ASP:TextBox>
<ASP:Button ID="Button1" Runat="server" Text="送信"
PostBackUrl="~/Target.aspx" />
</ASP:コンテンツ>
<ASP:Button> の PostBackUrl 属性に注意してください。この属性は、ボタンにデフォルトのポストバックを実行せず、Target.aspx にデータを直接送信するように指示します。
特に ASP.NET ViewState に慣れている場合は、これがどのように機能するのか疑問に思うかもしれません。物体。ただし、それはこの記事の範囲外です。クロスページ配信機能を使用すると、新しい非表示フィールドがページに追加されます:
<input type="hidden" name="__PREVIOUSPAGE" id="__PREVIOUSPAGE"
value="p1-dFHlCpgH2alr1vkr3G21UIR7jOuzn074led6lbGf1KQ47_F25GwG0" />
これはコントロール ツリーによって生成されるビュー ステートに少し似ていますが、クロスページ配信のためにページを検証するビュー ステートのフラグメントです。ページが別のページにクロス投稿される場合、受信側のページは投稿ページのインスタンスにアクセスできる必要があります。この場合、Target.ASP が Source.aspx の詳細にアクセスできることを意味します。実際、より効率的なアプローチは、厳密に型指定されたマネージャーを介して Source.aspx から Target.aspx に API にアクセスすることです。配信ページ(前ページ)にアクセスするために、ASP.NET2.0 ではクロスページ配信用のページ属性 PreviousPage を提供しています。
PreviousPage は配信ページのインスタンスを返します。また、クロスページ配信かどうかを確認するために使用されるプロパティ IsCrossPagePostBack もあります。このプロパティは既存の IsPostBack に似ていますが、クロスページ投稿が発生した場合にのみ true を返します。
PreviousPage プロパティは異なる動作をする可能性があります。デフォルトでは、単に前のページのインスタンスを Page タイプとして返します。ただし、新しいディレクティブを使用すると、PreviousPage プロパティに厳密に型指定されたインスタンスを返し、ページのパブリック メンバーにアクセスできます。たとえば、次のコードを Target.aspx に追加します。
<%@ PreviousPageType VirtualPath="~/Source.aspx" %>
これで、Target.aspx の PreviousPage プロパティを使用して、Source.aspx のデータにアクセスできるようになります。
ただし、Source.aspx の NameBox などの
サーバー コントロールにアクセスするには、次のコードも記述する必要があります。
TextBox nameBox = PreviousPage.FindControl("NameBox") as TextBox;
コントロールツリーにアクセスします。サーバー コントロールはデフォルトで保護されたメンバー変数を使用するため、前のページの要素に本当に簡単にアクセスするには、Source.aspx のプロパティまたはメソッドをパブリックとして公開する必要があります。そうすれば、次のコードが機能します。 = PreviousPage.NameBox;
クロスページ配信は ASP.NET の優れた機能です。クロスページ配信の仕組みについて詳しく説明した記事がいくつかあります。 MSDN マガジン エッジ 9 月号のコラムに掲載された Dino Esposito のカッティング (私の翻訳: ASP.NET Form (翻訳) を参照してください)。また、ASP.NET に習熟している場合は、ほとんどの場合、標準のページ ポストバック モデルを使い続けることになるでしょう。 (翻訳者: これは、あなたが専門家であれば、この機能を軽視するということを意味します)
ウィザード コントロールは、
クロスページ配信を通じてアプリケーションの複雑なナビゲーション機能を簡単に構築できます。ただし、この機能によってウィザード スタイルのユーザー インターフェイスの構築が容易になるわけではありません。ウィザード スタイルのユーザー インターフェイスは、線形か非線形かに関係なく、多くの場合、タスクを実行できるように設計されています。これは、複数のチャンクに分割された複雑な一連のステップを完了するユーザーフレンドリーな方法をエンドユーザーに提供します。
ASP.NET 1.x では、ウィザードは、同じページに複数の <ASP:panel> サーバー コントロールを配置し、ユーザーの場所に基づいて表示を切り替えるなど、いくつかのトリックを使用して実装されることがよくありました。 ASP.NET でウィザードを作成するのは簡単な作業ではなく、多くの設計者はウィザードを放棄しており、ステップ プロセスの管理も複雑です。
ASP.NET の新しいクロスページ配信機能を使用すると、ウィザードの問題を解決できますが、非線形ナビゲーションが必要な場合は課題でもあります。たとえば、ステップ 1、ステップ 2、ステップ 3 ~ 5 をスキップ、ステップ 6、ステップ 3、ステップ 2、ステップ 6 では、ASP.NET 2.0 ウィザード コントロールでこれらの問題のほとんどが解決されます。また、クロスページ配信ウィザードのすべての入力要素には、ページ ポストバック モデルを通じて継続的にアクセスできます。
ウィザード コントロールの機能は、ASP.NET 1.1 でパネルを非表示にする方法に非常に似ています。ただし、ウィザード コントロールは一連の <ASP:WizardStep> を公開しており、これには任意の数の子コントロールを含めることができます。ただし、各 <ASP:WizardStep> には独自の一意の ID が必要です (図 1 を参照)。ウィザード コントロール ページはすべてのナビゲーションを管理し、線形および非線形ナビゲーションをサポートし、設計時の完全なサポートを備えています。図 2 は、ウィザード コントロールを示しています。左側はリンクベースの非線形ナビゲーション、右下は線形ボタン ナビゲーションです。開いたタスク メニューからは、一般的なタスクだけでなく、設計時にステップ間を切り替えることができるステップのリストも表示されます。
図 2 Visual Studio の
ウィザード ウィザード コントロールの表示要素はすべて構成可能です。非線形リンクはボタンに置き換えたり、エントリを削除したりできます。また、前、次、および完了した線形ナビゲーション要素を画像ボタンやリンクに変更することもできます。実際、コントロールのすべての側面はテンプレートを通じて構成できます。
ASP.NET 1.1 でウィザード コントロールを作成する際の難しさの 1 つは、ユーザーがどこにいるべきかを管理することでした。ウィザード コントロールは、ActiveStep プロパティを公開することでこのタスクを簡素化します。 ActiveStep プロパティは、どのステップが現在アクティブであるかをクエリして判断できます。ウィザードの自然なフローは実装で宣言されたとおりに進行しますが、このフローは MoveTo メソッドでいつでも変更できます。 MoveTo を使用すると、任意のステップを ActiveStep として設定でき、ナビゲーションと処理を支援するために、いくつかのイベントも提供されます (図 3 を参照)。
新しいウィザード コントロールは、ユーザー情報を収集するときに非常に便利です。ASP.NET 1.1 ですべての基本構造を作成する必要はありません。ウィザード コントロールは非常に便利なので、ast.net チームはこれを CreateUserWizard コントロールの基本クラスとして使用し、メンバーシップ関数の一部としてユーザーを作成するために使用します。
セクション
「クロスページ投稿」と「<ASP:Wizard>」コントロールでは、ASP.NET 開発者にアプリケーションのナビゲーション フローを制御するための新しいオプションをいくつか提供します。クロスページ配信は、現在 Response.Redirect または Server.Transfer を使用する必要がある状況で役立ちます。ウィザード コントロールは、線形データ収集と非線形データ収集の両方を必要とする複雑なデータ収集を構築するのに最適です。
-------------------------------------------------- ------
図 1 ウィザードの手順
<ASP:Wizard runat="server" >
<ウィザードの手順>
<ASP:ウィザードステップ ID="ステップ 1">
いらっしゃいませ!
</ASP:ウィザードステップ>
<ASP:ウィザードステップ ID="ステップ 2">
あなたの名前は何ですか: [TextBox1]
[ボタン1]
</ASP:ウィザードステップ>
<ASP:ウィザードステップ ID="ステップ 3">
[TextBox1.Text] さん、ありがとうございます!
</ASP:ウィザードステップ>
</ウィザードの手順>
</ASP:ウィザード>
-------------------------------------- --- ----------
図 3 ナビゲーション イベント
イベント | 説明 |
---|---|
ActiveStepChanged | ActiveStep が新しい WizardStep に設定されたときに発生します。 |
CancelButtonClick | 「キャンセル」ボタン |
FinishButtonClick | 「完了」ボタンとして識別されたボタンがクリックされたときに発生します。 |
NextButtonClick | 「次へ」ボタンとして識別されたときに発生します。ボタンがクリックされる |
PreviousButtonClick | Previous ボタンとして識別されるボタンがクリックされると発生します |
SideBarButtonClick | サイドバーのリンクまたはボタンの 1 つがクリックされると発生します |