重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

◆やろうとしていること
JQuery+JQueryMobile+ASP.net2.0 を使用して、
カレンダーから日付を選択させるモーダルウィンドウを作ろうとしています。

◆質問内容
モーダルウィンドウを作り、そっちでの入力値を親に返そうという処理を実装しようとしたとき、
ASPのイベントも、JQueryのイベントも、処理が終わったら「呼び元に戻す」ということをしていると思います。
で、おそらく、
(1)JQueryの$("buttonのセレクター").click でのハンドル
(2)ASP.NETでの、with Event コントロール名、handles イベント名での、イベントハンドルと
があり、以下の2つの機能をうまく融合できなくて困っています。

A:モーダルウィンドウの作成は、JQueryでは、結局は同じHTML内に、DOMでコントロールが追加・更新されるだけで、<HTML></HTML>の単位ではなく、<data-role=page>の単位で書き換えをする。

B:モーダルウィンドウを出そうとしているため、<HTML></HTML>の単位で、
ウィンドウが作成され、ユーザが見ているページのURLは、「親ウィンドウ」のURLとは異なる。

上記認識で合っていますでしょうか?
宜しくお願い致します。

******************************************************

◆解決の方向性?
案1:JQueryUIなり、JQuery Mobileのカレンダーを探し、それだけを使う。
   その際は、ASP.NETでは、ASP:Clender などは使わない。
   (asp:Calenderや、asp:HyperLink等は使わない。同じ画面のURLで処理ができなくなるため)

案2:JQueryでの「$("buttonのセレクター").click でのハンドル」など、
   動いてしまうイベントを、かたっぱしから、処理がキャンセルされるようにする。
   (jQueryのDOMの差し替えを、全て無効にするため。)
   ⇒ すべてのイベントを把握&実装するのは現実ではないた、この案は取れない。

上記認識で合っていますでしょうか?
宜しくお願い致します。

A 回答 (1件)

ASP.NETの特徴は、


・サーバコントロール
・ビューステートによるコントロールの値保持
・ポストバック
です。イベントについては、かつてのWindowsフォームのプログラミングスタイルで移行できるように、プログラム的に「イベントハンドラ」の形態をとっているだけで、内実はポストバックと、サーバ側処理の連携を隠蔽したものです。
javascript側のイベントハンドラとは動作原理が全く異なります。

ASP.NET Ajaxはまたちょっと違った内容ですが、フォーム全体をポストバックすることに違いはありません。戻りによる画面書き直しを画面の一部に止め、Ajax「ふう」の遷移を実現するものです。

で、jQueryとASP.NETの連携といいますと、DateTime Pickerを例にしますと、クライアントサイド側で取得した値をサーバコントロールにセットし、後はWebフォーム側でポストバックするか、javascriptからポストバックまでを起こすような形式がベストだと思います。

jQueryでデータ送信まで行う手法($.Ajaxなど)もありますが、それですとASP.NETを使うメリットは全くなく、ASP.NET MVCを使うことになるでしょう。
また、ASP.NET Ajaxを使うのであれば、jQuery連携は煩雑なだけで、ASP.NET Ajax側のコントロールを使うほうが合理的でです。

最後に一言。
ASP.NETとjQueryを連携して使う場合の本命は、ASP.NET MVCです。
また、Webフォームの場合も、サーバコントロールのIDを操作できる、ASP.NET 4.0の採用がベストです。
ASP.NET 2.0なんか使ってはいけません。javascript連携は良くありません。
    • good
    • 0
この回答へのお礼

詳しいご回答、ありがとうございます!

Jqueryで値をセットしておき、最後に1回だけサーバに送信するようにしました。

今、HTML5とCSS3を使っているので新しいinput typeが対応しておらず、不便を感じていました…

ASP.NET MVC、調べてみます

ありがとうございました!

お礼日時:2013/04/04 06:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!