4

サードパーティのコンポーネントがあります。カレンダーコントロールです。ポップアップメニューを表示するためにjavascriptを起動するクライアント側のイベントがあります。MVCを使用できるように、クライアント側ですべてを行います。

dd

   function MouseDown(oDayView, oEvent, element) {

    try {

        e = oEvent.event;

        var rightClick = (e.button == 2);
        if (rightClick) 
        {
            var menu = $find("2_menuSharedCalPopUp");
            menu.showAt(200, 200, e);
        }


    }
    catch (err) {
        alert("MouseDown() err: " + err.description);
    }


}

JavaScript は、最初は $find で完全に起動します。

部分的なポストバックを介してカレンダーを更新する別のクライアント側メソッドがあります。$findステートメントエラーを「null」で使用する、これ以降のすべてのMouseDowns(右クリック)を実行すると。

人々が抱えている同様の問題はすべて、ポストバック後にjavascriptを呼び出すことに関連しているようです-解決策は、PageRequestManagerを使用してイベントを再登録するか、サーバーにクライアント側関数を登録するなどです.

ただし、イベントは発生しており、javascript は機能しています。DOM 内の参照が問題のようです。

何か案は?

4

4 に答える 4

1

私はこの問題に光を当てようとします:

  1. $findjQuery メソッドのように見えるかもしれませんが、jQuery メソッドではありません。これは ASP.NET Ajax に由来し、クライアント側で ASP.NET Ajax コンポーネントを見つけるために使用されます。正しい使い方は「#」なしです。ほとんどの場合、ClientID サーバー プロパティであるコンポーネントの ID が必要です。
  2. おそらく、ASP.NET Ajax に基づくサード パーティのコンポーネント ライブラリを使用していると思います。このライブラリが Ajax を行う MVC の方法をサポートしていない可能性は十分にあります。MVC Ajax は ASP.NET Ajax としては機能しません。UpdatePanel として機能せず、部分ビューでスクリプト タグを実行しません。その結果、カレンダー コンポーネントは初期化されず、$find は正しく を返しますnull

何を与える?部分ビューのロードに jQuery ajax を使用することをお勧めします。埋め込まれた JavaScript コードを正しく実行し、より良い結果につながる可能性があります。

于 2010-06-11T05:39:43.227 に答える
0

jquery は、部分的なページのポストバックでイベントを再バインドする必要があります

これはあなたを助けるでしょう..

于 2010-06-11T06:08:20.523 に答える
0

メニュー = のこと$('#2_menuSharedCalPopUp');ですか?

$find は、関数でまったく宣言されていません。

jQuery での .find() の使用は

<div id="parent">
   <div class="child" />
</div>

$('#parent').find('.child'); // useful for cached jQuery objects
于 2010-06-11T05:17:24.327 に答える
0

部分ビュー呼び出しから戻ったときに、名前と ID を確認しましたか? IDが変わっている可能性があります。

この場合、コントロールに「MyCalendar」などのクラス名を付けてから使用します$find(".MyCalendar");

于 2010-06-11T05:21:57.780 に答える