0

私は AJAX/javascript を初めて使用します。私がやろうとしていることに対する最善のアプローチが何であるかわかりません。

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

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

これを行うにはいくつかの方法があります。

  1. HtmlGenericControls のリストを作成し、それらを返します。
  2. 文字列のリストを作成します。各文字列は、ページにドロップする Div コード全体です。(これはなぜか気持ち悪い)
  3. 必要なデータを含む単純なコンテナー オブジェクトを作成します。それらをページに渡し、それらを使用して JavaScript 内で Div を作成します。

これらのどれでも機能すると思いますが、標準的な慣行に従いたいと思います。あなたならどちらを選びますか?

4

3 に答える 3

2

実際、IMHO のベスト プラクティスは、HTML ではなくサービスからデータを返し、クライアントで UI を構築することです。これは通常、同じデータが異なる場所で使用される可能性があるためです。現在、PageMethods はそのページのデータのみを返すため、再利用が必要ない場合はサーバー側の HTML で問題ありませんが、個人的には JQuery を使用してクライアントで UI を構築し、データのみを渡します。これにより、ネットワーク経由で転送されるデータが少なくなり、アプリの速度が向上し、ページのレンダリングがクライアントのブラウザーにプッシュされます。

HTH。

于 2011-01-31T14:05:38.703 に答える
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" ]
}

そのようなものを文字列として渡して使用できますvar object = eval( '(' + returned string + ')' )

幸運を

于 2011-01-31T14:13:38.923 に答える
0

私も昔からやってます。これを行うのは簡単ではないと言えます。しかし今、私は良い解決策を見つけました。あなたに言わせてください。最良の方法は、更新パネルを使用することです。なんで?たとえば msajax エクステンダを使用している場合、updatepanel を使用すると適切に初期化され、updatepanel は新しいスクリプト ファイルがない場合でも転送します。

わかりました、私のページには 5 つのコントロールがあります。それぞれが条件付き更新パネルでラップされています。ユーザーはすべてのアイテムの設定を変更でき、保存すると、1 つのコントロールのみが見事に同期されます。

今、新しいものを追加したい場合は、コレクション全体に対して別の更新パネルがあります

お気に入り

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

ユーザーが別の updatepanel を追加した場合 (クライアント側でこれを管理し、webmethods を使用してどこかに保存し、この設定を使用して updatepanel を生成する必要があります)、コレクション全体を更新します。

updatepanels を使用すると、多くの時間を節約できます。

于 2011-01-31T14:41:05.720 に答える