[注:この段落はタイトルの内容とは関係がないので読み飛ばしていただいても構いません] 『スターゲイト』を2話観てシャワーを浴びた後、ようやくこの記事を書き始めることにしました。技術的な内容とは関係なく、これは私にとって初めての真にオリジナルな技術記事です。ようやくこの一歩を踏み出すことができました。実際、私は初期のキャンパスバスからブログパーク、愚痴用の Sina ブログまで、数多くのブログを開設してきました。実際、ブログを始めた当初の目的は、プログラムを作成する際の学習プロセスを記録することでした。しかし、それは私が勉強に集中できなかった結果であると考えられるようになりました。しかし、この記事から問題を解決するのに遅すぎることはありません。より集中して、より集中して。この集中的な考えに導かれて、私は最近ようやくプログラムを再び本格的に書き始めました。今度はやりたくないことを本当にやめて、自分の知っているプログラミング言語で C# コードを書くことに集中しました。お気に入りは C# と Javascript です。正確に言うと、私がこの言語に夢中になったのは最近です。当初は、子供の頃に遊んだ Basic と同じように小さくてシンプルだと思っていました。しかし、それは変わりました。これは VBS と同様のスクリプト言語ですが、実際には C 言語の外観の下にさらに多くの内容が隠されているようです。それについては別の記事で説明することにします。 .NET プラットフォームが好きです。2001 年に初めて C# 言語を使ってコードを書いたとき、なぜそれがとても美しいと思ったのですが、その後、環境の問題が原因で夢中になってしまいました。そのときは、2004 年までしばらく中断されていました。その後、再び手に取りましたが、1 年以上、コントロールの山を引っ張り出して、プロパティ パネルで調整するだけだったようで、何を忘れていたようでした。 Web はもともと次のようなものでしたが、最後に私の記憶を変えたものがあります --- Ajax。
実際、Ajax 開発フレームワークは、ASP.NET 2.0 がリリースされたときに、GridView などの一部のデータ コントロールで内部的に使用されています。「カスタム スクリプト コールバック」 ASP.NET」(中国語版 | 英語)を読んでasp.netの非同期呼び出しの魅力に気づきました(実装方法はbeta1版限定、スクリプトのコールバック部分についてはbeta1、beta2と正式版とは異なります)興味のある方は、最近リリースされた MSDN コンテンツをご参照ください) が、当時は Atlas を使っていたので、あまり気にしていませんでした。以前、.net で ASP について話し合ったとき、atlas の実装は面倒すぎると言いましたが、彼が実装したいのはそれほど面倒な必要のないほんの数個の非常に小さなコンテンツだけです。私は、これら以外の .NET の ajax フレームワークについては詳しくありませんでしたが、友人のプロジェクトを使用して (本人の同意を得て)、これに関する多くのコードを書きました。 , 突然、コードがごちゃごちゃしているという問題に気づきました。各ページは似ており、インタラクションに加えて渡すことができる文字列パラメーターは 1 つだけですが、高価なデータを表示するにはインライン フレームを使用する必要があります。 2 日前、ハイツに行って、「Ajax Advanced Language Programming」という本を購入しました。その一部を読んだ後、突然、asp.net 2.0 でスクリプト コールバックを実装する方法を理解したいと思いました。実際、今振り返ってみると、「ASP.NET のカスタム スクリプト コールバック」の記事の多くの箇所で非常に明確に説明されていますが、当時は多くのことが雲の中にあり、利用者はその効果を確認することしかできなかったと言えます。 . 最も簡単な実装だと思うものを最初に投稿してから分析します。
新しい Default.aspx ページを作成し、そのページに CheckBox コントロールを追加して、Default.aspx.cs ファイルを開くと、_Default クラスによって 3 つの継承インターフェイス、ICallbackContainer、ICallbackEventHandler、および INamingContainer が追加されます。
[コード 1]
#region ICallbackContainer member
public string GetCallbackScript(IButtonControl buttonControl, string 引数)
{
throw new Exception("メソッドまたはオペレーションが実装されていません。");
}
#endregion
#region ICallbackEventHandler メンバー
文字列一時値;
パブリック文字列 GetCallbackResult()
{
//新しい例外をスローします("サンプルエラー");
戻り温度;
public
void RaiseCallbackEvent(stringeventArgument)
{
temp = "_____" +eventArgument + "は成功しました。_____";
}
#エンドリージョン
Default.aspx.cs ページの Page_Load メソッドに移動し、次のコードを追加します。
[コード2]
protected void Page_Load(オブジェクト送信者, EventArgs e)
{
string temp = Page.ClientScript.GetCallbackEventReference(this, "arg", "Callback", "context", "OnError", true);
文字列スクリプト = "関数 CallServer(arg,context){" + temp + "}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "abc", script, true);
CheckBox1.Attributes.Add("onclick", "CallServer('I call Server ','context');");
CS コードを編集した後、Default.aspx ファイルを開き、<head>...</head> の間に次のコードを追加します
。
[コード3]
<script type="text/javascript">
関数 OnError(err,context)
{
アラート(エラー);
関数
コールバック(引数,コンテキスト)
{
アラート(引数);
}
</script>
ここの CheckBox コントロールは気軽に呼び出すことができ、必要に応じて変更できます。ただし、Button コントロールを使用する場合は、デフォルトで OnSubmit イベントがアクティブになるため、それを設定するか、使用する必要がある場合があります。 HTML を直接コントロールします。上記のコードはスクリプト コールバックの最小限の実装とみなすことができ、それらはすべて必要です。
基本的なコールバックを使用するコントロールは、ICallbackContainer、INamingContainer、および ICallbackEventHandler の 3 つのインターフェイスを実装する必要があります。実際、INamingContainer には実装する必要があるインターフェイス コンテンツはなく、「Page オブジェクトのコントロール階層内に新しい ID 名前空間を作成するコンテナ コントロールを識別する」だけです (MSDN から引用)。 ICallbackContainer インターフェイスについては、MSDN (中国語版) の説明が比較的曖昧です。ここではコールバックの基礎としてページを使用するため、いくつかの関連記事も紹介しています。 GetCallbackScript インターフェイスによって実装されますが、独自の Ajax コントロールをカプセル化している場合、このメソッドは非常に便利です。Page_Load メソッドで CallServer メソッドを登録したため、ここでは ICallbackEventHandler によって実装されたメソッドを使用してデータを処理します。呼び出しプロセスをより明確に理解できるように、CheckBox に関連付けられた OnClick イベントでトリガーされます。
その後 [コード 3] 2 つの Javascript メソッドを実装しました。1 つは呼び出しエラーの処理に使用され、もう 1 つは呼び出しが成功した後の戻り情報の処理に使用されます。 [コード 1] には、コメントアウトした例外をスローするコードがあります。このコードを通じて、OnError メソッドの呼び出しをシミュレートできます。
ここまで、この呼び出しの実装方法を見てきました。率直に言って、これは実際にはコントロールをドラッグする比較的高度な方法ですが、どのように実装されるのでしょうか? XmlHttpRequest に関するものが何も表示されないのはなぜですか? (このコードは Javascript をサポートするどのブラウザでも使用できるため、これが Ajax を実装する最良の方法であると強く信じています。秘密のドアとは何の関係もないと思います)
コンパイル、実行……
実行中のページでチェックボックスをクリックすると、「___I call Server is success.___」と表示されます。これはどのように実行されるのでしょうか?実際、このページの [ソース コードの表示] をクリックすると、ここに 3 つのスクリプト ブロックが自動的に生成されます。1 つはサーバー コントロール イベントのポストバックを処理するために使用されます。これは、ClientScript を使用して登録した CallSerer メソッドであり、外部スクリプトのリンク タグもあります。これがキーです。
<script src="/TechTest/WebResource.axd?d=DE9YrizlDDq8OUlo_3rQgA2&t=632919546726295408" type="text/javascript"></script>
上記の SRC で示されたアドレスに従ってアドレスを開くと、 WebResource.axd ファイル (Thunder などのダウンロード ツールに接続アドレスを入力すると、ダウンロードできます)。これを開くと、このファイルに実際に Javascript コードが含まれていることがわかります。
試してみてください
。
{
xmlRequest = 新しい XMLHttpRequest();
}
キャッチ(e)
{
試す
{
xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
キャッチ(e)
{
}
}
コードはとても見覚えのあるものです。
if (!useAsync)
{
if (__synchronousCallBackIndex != -1)
{
__pendingCallbacks[__synchronousCallBackIndex] = null;
}
__synchronousCallBackIndex = callbackIndex;
この中に
?
これは Page.ClientScript.GetCallbackEventReference メソッドの非同期呼び出しオプションを処理するものではないでしょうか?
私が研究している中には便利なコードがたくさんあります。......
これら以外にもたくさんの方法があります。率直に言えば、これは非常に単純な Ajax です。フレームワークのカプセル化には、制御イベントの処理とポストバック要求の処理が含まれます。これに基づいて他のカプセル化を行うことができるため、.NET Ajax コントロールを のコンポーネントとして直接カプセル化できます。 NET の開発中。
実際、Java、.NET、または PHP テクノロジーはすべて、サーバー側での HTTP の高度なカプセル化です。ちょうど私たちが昔使用していた CGI テクノロジーと同じであり、現在では Web のテクノロジーがさらに進歩しており、それについて理解することができます。 .NET の内部動作メカニズムを利用することで、いくつかの制限を回避し、一部のページやコントロールを書き換えて独自の Ajax 開発環境を構築できます。
私はかつて制御エンジニアでしたが、カプセル化は大規模工場の時代に必要な技術だと考えています。しかし、プログラマはより高品質なプログラムを開発するために、プログラムの動作の背後にある内容を深く理解する必要があります。製品。