2011-01-31 10 views
0

私はAJAX/javascriptを使い慣れていません。ページにhtmlコンポーネントを追加するためのAJAXベストプラクティス

私はJavascriptを使用してページのページメソッド(WebMethods)を呼び出しています。私が取得しているデータは、Divのリストです。

返される数はわかりませんが、コンテンツに応じてページ上の適切な場所に挿入する必要があります。

私はこれを行うのカップルの方法を参照してください。

  1. はHtmlGenericControlsのリストを作成し、それらをバックに渡します。
  2. ストリングのリストを作成します。各ストリングは、ページにドロップしたいDivコード全体です。 (これは何らかの理由で間違っていると感じる)
  3. 必要なデータを持つ単純なコンテナオブジェクトを作成する。それらをページに渡し、javascript内でdivを作成するために使用します。

これらのいずれも機能すると思いますが、私は標準的な方法に従いたいと思います。どちらを選択しますか?

答えて

2

実際には、IMHOは、HTMLではなくサービスからデータを返し、クライアントにUIを構築することをお勧めします。通常、これは同じデータを別々の場所で使用できるためです。さて、PageMethodsはそのページのデータだけを返すので、サーバ側のHTMLは再利用が必要ない場合はOKですが、個人的にはJQueryを使用してクライアント上にUIを構築し、データを渡します。これにより、ワイヤを介して転送されるデータが少なくて済み、アプリの速度が向上し、クライアントのブラウザへのページのレンダリングが中断されます。

HTH。

1

データをJSONオブジェクトとして返すことをお勧めします。コントロールの各タイプのJSONオブジェクト内に配列を作成してから、for (var q in json_object['div_type_q'])でそれらを繰り返してページに動的に追加することができます。

例のJSONオブジェクト:

json_object = { 
div_type_1: [ 0: "Content", 1: "More content", 2: "Even more content" ], 
div_type_2: [ 0: "This is navigation content" ] 
}

あなたは文字列としてそのような何かを渡すと

0

- 私はいくつかの時間以来、あまりにもこれをやってvar object = eval('(' + returned string + ')')

幸運を使用することができます。私はこれをするのは簡単ではないと言うことができます。 しかし、今私は良い解決策を見つけましたが、私はあなたに言いましょう、まだ最高の更新パネルを使用しています。どうして?たとえば、msajaxエクステンダを使用している場合は、updatepanelを使用すると正しく初期化され、updatepanelは新しいスクリプトファイルを転送します(存在しない場合)。

私のページには5つのコントロールがあります。それぞれに条件付きの更新パネルがラップされています。ユーザーは1つのアイテムごとに設定を変更することができます。保存すると、1つのコントロールだけが素晴らしい同期を得られます。

ユーザーが別のUpdatePanelを追加する場合は今、新しいものを追加したい場合、私は(、今

<updatepanel> 
     <updatepanel-inner> 
      <control> 
     </updatepanel-inner> 
     <updatepanel-inner> 
      <control> 
     </updatepanel-inner> 
     <updatepanel-inner> 
      <control> 
     </updatepanel-inner> 
     <updatepanel-inner> 
      <control> 
     </updatepanel-inner> 
    </updatepanel> 

のように全体のコレクションのために、

を別のUpdatePanelを持っているあなたがこれを管理しなければなりませんクライアントサイドでは、webmethodsを使ってそれらを保存します。どこかでこの設定を使ってupdatepanelsを生成します)、コレクション全体を更新します。

私はあなたに、更新パネルであなたは多くの時間を節約すると言いましょう!

+0

更新パネルの問題は、ページが完全なライフサイクルを経るとともに、更新ごとにビューステート全体を回るということです。可能な限り小さなデータを渡したいので、代わりにページメソッドを選択しました。 – Erix

+0

ええ、ライフサイクルを使用することには正当な理由があります。気にする必要のない依存関係があります。私は物事について話していない、私は試してみませんでした。私はこのように働いているので、以前は気をつけなければならないエラーや問題は少なくなっています。そして、もしあなたがwit updatepanelsを動かしてそれを準備することができ、あなたが動的にビルドするかどうかを選択するよりも、あなたがchyrenツリーを動的に構築しているならば、あなたがasycmodeにいるなら、ページ全体をリロードするよりも、更新パネルの更新がはるかに高速であることを確認できます。 – Luke

関連する問題