2012-02-26 18 views
0

javscript関数からサーバー側の関数を呼び出す必要が生じました。隠しボタンを使用してJSからサーバーサイド関数を呼び出す

私が知る限り、JSはクライアント上で実行されているため、これは実際には可能ではないため、静的関数(同じコンテキストにはありません)を呼び出すことしかできません。

aspサーバー側のボタンを隠し、JSからプログラムでクリックすると、ポストバックが作成され、イベントハンドラが呼び出されます。この方法について

いくつかの質問 -

  1. このメソッドがどのように良いのですか?つまり、この方法は広く使われているのですか、それとも初歩的で古いと考えられていますか?

  2. この方法の欠点は何ですか?

  3. この方法についてもう一度読んだことは、この方法を使用すると、全体のページロジックデザインに何か問題があることを意味します。それはあるレベルで本当ですか?おそらくこの問題に対処するより良い方法はありますか? PageMethodsを使用していることをやっての

おかげ先

+1

AJAXを試してみましたか? JSコードを使用してserversideコンポーネントを呼び出すことができます。 –

+0

Ajaxを使用して非静的関数を呼び出すことはできますか?どうやって? –

答えて

1

手動で__doPostBack javascript関数を呼び出すことで、手動でポストバックを行うことができます。 this他の投稿を見てください。

+0

これには非同期の承認がありますか? –

+0

onloadイベントで__doPostBack javascript関数(リンクボタンの関数)を呼び出すと、ボタンを押してポストバックを正常に実行しても、レイアウトには影響しません。 – Mhmd

+0

このメソッドは、隠されたボタン?違いは何ですか? –

0

一つまともな方法です。属性[WebMethod]を持つコードの背後に静的メソッドを宣言することができます。つまり、クライアント側からのajaxリクエストでアクセスできます。このように:

[WebMethod] 
public static string GetDate() 
{ 
    return DateTime.Now.ToShortDateString(); 
} 

あなたは属性を取得するためにSystem.Web.Servicesを使用する必要があります。

クライアント側から、あなたはjQueryを使って、このような何かを行うことができます:

$.ajax({ 
    type: "POST", 
    url: "YourPage.aspx/GetDate()", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(data) { 
     alert(data.d); 
    } 
}); 

はASP.netはあなたが戻って送信しているものは何でもに.dオブジェクトを追加しますのでご注意ください。

AFAIKこれは、ポストバックをトリガーすることなく、クライアント側とコードビハインドの間でやりとりするための好ましい方法です。また、何が起こっているのかははっきりしています。

ボタン上でclick()を呼び出すことによってトリガされるポストバック付きの隠しボタンを使用すると、はるかに「魔法」になり、何が起こっているのかがはっきりしません。 __doPostbackと同じです。

+0

問題静的メソッドを使用したくないです(ページ内のオブジェクトと通信できる必要があるため) –

+1

@SkipperGeffen、いいえ、良い方法はありません。 ASP.Netはステートレスプロトコルで状態を維持しようとしています。これは、ASPコントロールのみを使用している場合に最適です。 javascriptを使用するように設定されている場合は、ajaxとwebmethodsを使用して通信するのが最適です。非同期ポストバックを行うためのASP.Netのソリューションは、UpdatePanelsを使用しています。彼らはしばしば必要以上に多くの情報を送る。 –

関連する問題