2011-01-10 9 views
0

別のタグを使って2つのリストを作成してそれぞれのテーブルで構成した美的コントロールを作成しました。コントロールは常に、各項目に関連付けられたimgタグをクリックして、2つのリスト間で移動させます。私はJavaScriptを介してリスト間のすべての動きをしていると値を取得し、ポストバック時に2つのリストに格納するための良い方法を持っている。私は、インデックス/クラスを隠し値に格納し、アイテムを見つけるためにそれらを読み込むのが面倒だと思った。また、FindControl()を介してDOMをトラバースする巧妙な方法があるかもしれないとは思っていますが、それは確かではありません。どんな入力も素晴らしいでしょう。DOMにアクセスしてHTMLテーブルから値を取得するサーバー側

もう1つのことは、複合コントロールではないということです。すべてのタグはRenderContents()メソッドでレンダリングされています。だから私は、たとえhtml要素へのアクセスの背後にあるコードが必要だったとしても、通常はそうであるように、runat = "server"属性をelemに貼り付ける方法があるかどうかはわかりません。

ここに生成されるHTMLがあります。私は、この時点でhtmlを生成する以上のことをしないので、サーバー側のコードを投稿する必要はないと思います。

<div class="DualListPanel" id="test1"> 
    <div key="test1_Unassigned"> 
     <table class="DLPTable"> 
     <tr> 
      <td>Item 1</td> 
      <td><img src="..." onclick="Move(this)" /></td> 
     </tr> 
     <tr> 
      <td>Item 2</td> 
      <td><img src="..." onclick="Move(this)" /></td> 
     </tr> 
     </table> 
    </div> 
    <div key="test1_Assigned"> 
     <table class="DLPTable"> 
     </table 
    </div> 
</div> 
+0

あなたのコードをもう一度投稿する必要があると思ってください:) –

+0

私はちょうど投稿を再訪し、フォーマットがうまくいないのを見ました。私は裸の骨= D –

答えて

1

FindControl()を使用してクライアントスクリプトを解析することはできません。クライアント上の変更を追跡してサーバー上のデータを調整できるようにするには、非表示のフィールドを使用して変更を保存する必要があります。この場合、クライアントとサーバーとの対話を機能させるには、隠しフィールドしかありません。

+0

Ugghを持つ最初からやり直しをしました。それは私が恐れていたものが唯一の解決策になるでしょう。私はすでにそれをコード化し始めていましたが、私は正しく笑っていました。それを確認していただきありがとうございます。 –

0

もう1つは、正しいアプローチです。隠されたフィールドにデータを格納することは本質的に面倒ではありません。これは、クライアントとサーバーが通信する最も基本的な方法です。

しかし、私はAJAXとWebMethodを使用する別の方法を紹介したかったのです。 jQueryではこれがとても簡単です。あなたの提出ハンドラは、WebMethodへのPOSTを行うことができます。新しいリストの順序について必要な情報があれば、それは本当に必要な場合はすべてのHTMLを含めても、必要に応じて州や序数の変更を追跡すると思います。ずっと簡単です)。メソッドは、データベースを更新することができます。あなたが本当に気に入らなければならない場合は、非同期メソッドを使用してリアルタイムでサーバーにヒットすることができます(たとえば、クライアントが何かを移動するたびに)。

コンテキストを知らなければ、おそらくそれをやるのは残念ですが、それは時間と場所を持つ別の方法です。

+0

ええ、文脈は単純なコントロールで、左のリストから右のリストに項目を移動できます。リアルタイムである必要はなく、Webメソッドを使用すると、タスクに関連するオーバーヘッドが大きくなりすぎます。つまり、それは確かに目的を果たすことができる創造的な解決策です。入力いただきありがとうございます。 = D –

+0

理論的には、ajaxを使うのはオーバーヘッドが少なくなります(少なくとも、必要なときにのみ、何かを動かしたときではなく)。つまり、WebMethodを使用しているときに何が起こっているのかはわかりませんが、asp.netはスタンドアロンのWebハンドラのように扱えるほどスマートです。したがって、ポストバックでWebページ全体のコードやライフサイクルを処理するのではなく、アクティビティに固有のコードを実行して、それに必要なデータのみをポストするだけです。しかし、とにかく、それはあなたの状況で過度のように聞こえる! –

関連する問題