2009-08-12 13 views
1

私の問題は、クライアント側で動的に生成されたhtml/javascriptからサーバーサイドイベント(DeleteClickedなど)を呼び出すことです。私は深くネットに根ざしている私のウェブサイト上の既存のページを持っています。ページのライフサイクルはかなり複雑で、ページから発せられる数十のイベントがあります。動的に追加されたクライアントスクリプト/ HTMLサーバー側イベントを呼び出す

いくつかのJQuery機能を利用して、ページが既に読み込まれた後でリンクやボタンを追加したいと考えています。たとえば、特定の画像に小さなホバーオーバーグラフィックスを表示したいとします。小さなホバーオーバーグラフィックスは、削除、編集などの機能を提供します。これらのクライアントサイドのクリエーションのクリックイベントを、サーバーライフサイクル全体をスラッシュ(またはバイパス)することなくサーバーサイドのイベントに結びつけたいと思います。

私が考えることができる唯一の解決策は、ページ全体に非表示のasp.netコントロールを埋め込むことです。クライアント側のコードでは、非表示のコントロールに手動でclick()を強制します。残念ながら、私はページをロードするときに呼び出される必要があるすべてのイベントを必ずしも知る必要はないので、これは受け入れ可能だとは思わない。私はまた、必ずしも必要ではないクライアントにマークアップのトンを送信するファンではない。

私の質問は意味がありますか?どんな助けでも大歓迎です!

答えて

0

開かれた古い質問については、私はいくつかのクリーンアップを行っています。ここでの最良の解決策はASP.NET MVCです。このようなフレームワークの方がはるかに優れています! Webフォームの使用を余儀なくされた方には、私は良いソリューションはありません。新しいものを試すことができるあなたのために、私は強くMVCを提案します!

0

隠れたコントロールルートに行き、特定の負荷で呼び出される必要があるすべてのイベントがわからない場合は、必要になるかもしれないすべての隠しボタンをロードする必要があります。このようにして、サーバーにポストバックするコントロールを必ず用意します。

パラメーターをチェックして実行する必要のあるものを確認する「クリック」コントローラーは1つしかないかもしれませんが、それは非常に厄介です。

また、JavaScriptメソッドから非同期的に呼び出すことができるサーバーサイドコードからWebメソッドを公開することもできます。これにより、コントロールのイベントハンドラを必要とせずにアクションを実行できます。例えば

:(他の人が言及しているとして、あるいはAJAX)

/// <summary> 
    /// Deletes the 'something'. 
    /// </summary> 
    /// <param name="id">The unique id of the 'something' to delete.</param> 
    [WebMethod(true)] 
    public void DeleteSomething(string id) { 
     //Insert business logic 
    } 

はWebMethodのに見てみましょう、と私はあなたがそれはあなたの解決策を見つける合うと思います。

+0

WebMethodsを使用する際の問題は、ページがバインドされている基礎となるデータを変更する可能性があることです。私はasp.netコントロール(他のAJAXが呼び出され、Webメソッドにヒットした後)からイベントを発生させると、コントロールがもう存在しない可能性があるため、イベントが無効になる可能性があります。私は動的なHTML/javascriptが通常のページライフサイクルを使用するための方法が必要です。 WebMethodsは「本当のAJAX」であり、ページライフサイクルをバイパスします。 – jakejgordon

+0

「onsuccess」javascriptハンドラをWebメソッド呼び出しに接続すると、webmethodを介してイベントが正常に完了した後、javascript/jqueryを使用してコントロールを更新できます。失敗したjavascriptハンドラを接続して、呼び出しが失敗した場合に必要なクリーンアップを実行できるようにすることもできます。 –

+0

これはもっと暖かくなっているかもしれません...私が見ることができる唯一の明らかな問題は、WebMethodアクションを実行するためのものと、基本的には実行する必要があるものの2つのアクションページ(または適切な更新パネル)を再ロードします。 – jakejgordon

1

本当にこれを受け入れる場合は、少し違う方法で見てください。

  1. はあなたのASPXページはそれが今
  2. を発生どこ は、削除を実行し、そのクラスを呼び出して、その後 でき
  3. を再使用することができることをクラスにする必要があります「削除」を行い、すべてのロジック
  4. jQueryはAJAXリクエストを使用して ウェブサービスを呼び出すことができ、 サービスでは をASPXページとして参照できます。

このようにしてコードを再利用するだけでなく、UIを使用せずにコードをテストすることもできます。

+0

私は削除ロジックを取り除き、WebMethodsの使い方も知っていますが、私の問題を解決するとは思いません。これは私のコメントを別の答えにコピーしたものです.WebMethodsを使用する際の問題は、ページがバインドされている基礎となるデータを変更する可能性があることです。私はその後、ASPのイベントを起動します。ネットコントロール(他のAJAXが呼び出されてWebメソッドにヒットした後)は、コントロールがもう存在しない可能性があるため、イベントが無効になる可能性があります。私は動的なHTML/javascriptが通常のページライフサイクルを使用するための方法が必要です。 WebMethodsは「本当のAJAX」であり、ページライフサイクルをバイパスします。 – jakejgordon

1

jQueryはもっと軽量(そしてよりセクシーな)ソリューションですが、ページ上のいくつかの叩き方について考えましたか?理想的ではありませんが、余分なコーディングをすることなく、既存のフォームにajax機能を追加するのは比較的簡単です。

もしあなたが心をjQueryに設定していれば、WebMethod routeのいずれかの機能を1つのページに入れたり、jQueryが特定のアクションを実行するために呼び出す新しい.aspxページを作成することができます。連絡先を含むサイドバー、これは新しいAjax/Contacts.aspxページに移動することができ、jQueryコールを使用して編集できます)。

+0

私たちが追加しようとしている機能がアップデートパネルにとってあまりにもセクシーだとはかなり確信しています。私たちは実際にページ上にいくつかのUpdatePanelsを持っていますが、問題はまだ同じです。私が他の答えに加えた他のコメントを見てください。あなたの助けをありがとう。 – jakejgordon

0

残念なことに、残念ながら、私たちはこれに対して素晴らしい解決策を見出しませんでした。 .netイベントとJQuery AJAXを組み合わせる唯一の方法は、更新する要素が100%JQueryまたは100%.netイベントのいずれかである場合です。たとえば、一連のリンク(例:編集と削除)を含む画像のようなオブジェクトを動的に追加する場合、リンクは手動のAJAX(すなわちWebMethodを呼び出すJQuery)とJQueryを使用してDOMを更新する必要があります。 OR両方のリンクは、更新パネルで.netイベントを呼び出す必要があります。あるリンクJQueryと他のリンクを.netイベントにすると、.netはDOMがJQueryによって更新されたことを知らず、イベントが発生する可能性があるという問題が発生します。 DOMに設定する適切なIDが何であるかを予測するのは非常に難しいので、.NETが混乱することはありません(JQueryを使用している場合)。 .NET 4.0では、.NETの代わりに手動でコントロールIDを指定するオプションが用意されているので、これは非常に簡単になるはずです。

0

古典の​​混合についてはどうですか?<%= コントロール .ClientId%> JS側のサーバー側のマークアップですか?ちょっと混乱しますが、おそらく.NET 4.0まであなたを動かすオプションです。

関連する問題