2008-08-26 13 views
5

私はかなり私の会社のアプリケーションでかなりAjax重い機能を開始しようとしています。私がする必要があるのは、ユーザーがページにいた数分ごとにAjaxコールバックを作成することです。完全なPostBacksなしのASP.NET JavaScriptコールバック?

  • コールバックの前、後、または中にDOMの更新を行う必要はありません。
  • 私はページからの情報は必要ありません。ちょうどリクエストと共に送信されるべきサイトクッキーとID値からです。

私が知りたいのは、JavaScriptのAjaxコールバックをASP.NETページに残すことなく、ページ上の残りの情報をポストバックすることができるかどうかです。私はそれが可能ならばこれをする必要はありません。

私は実際にはページ上で単一のメソッドを呼び出すことができればいいだけです。

また、私はASP.NET 2.0に制限されていますので、新しい3.5フレームワークASP AJAX機能を使用することはできませんが、2.0フレームワーク用にASP AJAX拡張機能を使用することはできます。

UPDATE
私は私が探している正確に何であると考えられるようDanPの答えを受け入れることを決めました。私たちのサイトはすでにいくつかのことでjQueryを使用していますので、私の経験上、ASPのAJAXフレームワークよりもはるかに優れているようだから、おそらくjQueryを使ってリクエストしています。

データをIHttpHandlerに転送する最も良い方法は何でしょうか?クエリ文字列に変数を追加するか、送信する必要があるデータをPOSTする必要がありますか?

私が送信しなければならないのは、単一のIDだけですが、IDを送信してIHttpHandlerで処理するのが最善の方法であると判断できません。私は、基本的なコンピュータ技術を持つ人が偶然または意図的にページに直接アクセスしたりリクエストを繰り返すのを防ぐソリューションを考え出しています。これは可能ですか?

答えて

6

空白のページを作成したくない場合は、IHTTPハンドラ(ASHX)ファイルを呼び出すことができます:あなたはまた、asp.netのAjaxのライブラリーに組み込まれているWebMethodのを使用することができます

public class RSSHandler : IHttpHandler 
    { 
     public void ProcessRequest (HttpContext context) 
     { 
      context.Response.ContentType = "text/xml"; 

      string sXml = BuildXMLString(); //not showing this function, 
      //but it creates the XML string 
      context.Response.Write(sXml); 
     } 

     public bool IsReusable 
     { 
      get { return true; } 
     } 

    } 
2

あなたはASP.NET AJAXだけに限らず、同じことをするためにjQuery、YUIなどのサードパーティのライブラリを使用できます。サイトの空白のページにクッキーが含まれているヘッダーを返すよう要求するだけです。

-1

を。単にページのコードビヘイビア上に静的メソッドを作成し、それをAjaxから呼び出すだけです。

は、それがhere

-1

Webサービス(.asmxファイル)を使用する必要があります行う方法の非常に基本的な例があります。 MicrosoftのASP.NET AJAXでは、スタブを自動生成することさえできます。

2

私の投票は、同様HTTPHandlerの提案です。私はこれを頻繁に利用します。ページクラスのインスタンスを呼び出さないため、非常に軽量です。

ASP.NET AJAXフレームワークのすべてのトリックは実際に呼び出しごとにバックエンドでページ全体を再度インスタンス化して作成するため、膨大なリソースを必要とします。

したがって、私の典型的なスタイルのXmlHttpRequestはHttpHandlerに戻ります。

3

データをIHttpHandlerに転送する最も良い方法は何でしょうか?クエリ文字列に変数を追加するか、送信する必要があるデータをPOSTする必要がありますか?私が送信しなければならないのは、単一のIDですが、IDを送信してIHttpHandlerで処理するのが最善の方法であると判断できません。私は基本的なコンピュータスキルを持つ人が偶然または意図的にページに直接アクセスするのを防ぐ解決策を考え出したいと思います。

コールバックがクライアントコードに埋め込まれていると考えると、クエリーストリングまたはPOSTリクエストのいずれかを取得します。 IEの場合、火かき棒を持っていれば、あなたも同様に釘付けになります。

だから、その場合は、あなたにとって最も簡単なことをしてください(ヒント:私は単にクエリ文字列を使用します)。

リピートリクエスト/ダイレクトアクセスを処理するために、リクエストごとに送信されるキーを生成します。おそらく、現在の時間のハッシュ(ファジー、私は数分になるだろうが、ネットワークレイテンシのため秒はない)+クライアントIP。

次に、HTTPHandlerで同じハッシュを実行し、一致する場合にのみ実行します。

1

ASP.NET 2.0のみを使用しているので、AjaxProは.ashxファイルを作成することをお勧めします。あなたがしなければならないのは、あなたのウェブサイトにAjaxPro.dllを引き込むことだけです。私はAjaxProで全体のアプリケーションを開発し、非常にうまく機能していることがわかりました。これは、シリアル化を使用してオブジェクトを前後に渡します。

これは単なる使い方のサンプルです。

namespace MyDemo 
{ 
    public class Default 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     AjaxPro.Utility.RegisterTypeForAjax(typeof(Default)); 
    } 

    [AjaxPro.AjaxMethod] 
    public DateTime GetServerTime() 
    { 
     return DateTime.Now; 
    } 
    } 
} 

それはあなたがも

を追加する必要がEDIT

function getServerTime() 
{ 
    MyDemo._Default.GetServerTime(getServerTime_callback); // asynchronous call 
} 

// This method will be called after the method has been executed 
// and the result has been sent to the client. 

function getServerTime_callback(res) 
{ 
    alert(res.value); 
} 

のと同じくらい簡単ですJavaScriptを経由して、それを呼び出すためにconfig。 AjaxProはAPS.NET Ajaxと並行して動作し、クラスが[Serializable]としてマークされている場合は、クライアントからSeverにC#オブジェクトを渡すことができます

1

異なる視点を提供するだけで、あなたはPageMethodメインページ。 Dave Wardにはillustratesという素晴らしい投稿があります。基本的に、あなたはDaveのポストに示すように、メソッドを呼び出すためにjQueryのAjaxのポストを使用します。

$.ajax({ 
    type: "POST", 
    url: "Default.aspx/GetFeedburnerItems", 
    // Pass the "Count" parameter, via JSON object. 
    data: "{'Count':'7'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     BuildTable(msg.d); 
    } 
    }); 

不要にAsp.Net Ajaxの拡張のためにすべて。

関連する問題