0

jQueryダイアログを使用してユーザーにダウンロード条件ダイアログを表示するASP.NETWebサイトがあります。ユーザーがダイアログの条件に同意したら、サーバー側のポストバックを実行して、ブラウザーへのダウンロードの提供を担当する別のWebサイトのページへのResponse.Redirect呼び出しを発行します。問題は、Response.Redirect呼び出しが行われると、ダイアログを表示できなくなることです。

次のコードを使用して、document.readyイベントのダイアログを初期化します:-

$("#terms-dialog").dialog({
  modal: true,
  autoOpen: false,
  autoResize: false,
  height: 420,
  width: 500,
  overlay: {
    opacity: 0.5,
    background: "black"
  }
});

ダイアログを表示するコードは次のとおりです:-

function showTermsDialog(snippetid, title, agreement, url)
{
  $("#terms-dialog-text").html(agreement);
  $("#terms-dialog-controls").attr("style", "display: block;");
  $("#<%= this.SnippetID.ClientID %>").attr("value", snippetid);
  $("#<%= this.DownloadUrl.ClientID %>").attr("value", url);
  $("#terms-dialog").data("title.dialog", title); 
  $("#terms-dialog").dialog("open");
}

このコードを使用すると、ダイアログを複数回正常に表示できますが、Response.Redirect呼び出しが行われた後、dialog( "open")の呼び出しは機能しなくなります。

私がここでやろうとしていることと同じようなことをした人はいますか?あるいは、誰かがjQueryダイアログのデバッグのヒントを提供できる場合は、これらもいただければ幸いです。

4

4 に答える 4

1

この問題は、サーバー側のポストバックが正しく機能するように、jQuery ダイアログをページのフォーム セクションに配置する、私のダイアログが使用していた拡張機能によって引き起こされたようです。このコードの動作を変更して、代わりに単にダイアログを閉じてから、次を使用してサーバー側のコールバックを手動で呼び出すようにしました

<%= this.Page.ClientScript.GetPostBackEventReference(btnAgree, "") %>;
于 2009-02-14T23:08:33.757 に答える
0

残念ながら、考えられる理由については何も言えませんが、あなたの場所では、コンソールやブレークポイントなどのFirebugツールを使用してデバッグ コードを開始しようとしました。ある種の var 初期化または同様のエラーが発生する可能性があります。このヒントが少しでもお役に立てば幸いです。

于 2009-02-12T00:07:49.367 に答える
0

おそらく間違っていることがいくつかあります。

まずはダイアログの初期化ですが、ここに入れましたか?の

$(document).ready( function() { ... } );

そうでない場合は、そうする必要があります。ユーザーをリダイレクトし、そのリダイレクトで前のページ (ダイアログがあるページ) にリダイレクトすると、 (document).ready が再び起動され、ダイアログが初期化されます。

ただし、ASP.NET を使用する場合は、これを行う必要はありません。単純なフォームについて考えてください。あなたとユーザーにとってです。

jQuery で .load を使用すると、別のページを読み込むことができるため、ユーザーに要求されたファイルを提供する「同意する」というボタンがダイアログにあると想像してみましょう。

$(document).ready( function() {
  $("#terms-dialog").dialog({
    modal: true,
    autoOpen: false,
    autoResize: false,
    height: 420,
    width: 500,
    overlay: {
      opacity: 0.5,
      background: "black"
    },
    buttons: {
      I do not agree: function() { $(this).dialog('close'); }
      I agree: function() { 
        GetFileIfCookieExist("myfile.xls");
        $(this).dialog('close'); 
      }
    }
  });
});

function GetFileIfCookieExist(file) {
  // create cookie here
  $.load("getFile.aspx", { "f": file }, function() {
    // you can show a "loading" image
  });
}

getFile.aspx で、最初の行を除くすべての HTML コードを削除し、分離コードの Page_Load イベントで要求を処理し、次のような Response.Write メソッドを使用してドキュメントを書き戻します。

Response.Clear(); 
Response.AddHeader("content-disposition", "attachment;filename=" + Request["f"]);
Response.Charset = "";
Response.ContentType = "application/vnd.xls";

System.IO.StringWriter stringWrite = new System.IO.StringWriter();
stringWrite = AppendMyFile();

Response.Write(stringWrite.ToString());
Response.End();

要求で Cookie を作成し、aspx ページでその Cookie を確認することを忘れないでください。ユーザーがダウンロードを強制したために Cookie が存在しない場合は、ファイルをユーザーに送信する前に Cookie を削除してください。

Cookieは信頼性を保証するための戦略にすぎませんが、ユーザーがCookieを有効にする必要があるため(HotmailがWebサイトで電子メールを読むために行うように)、Sessionオブジェクトまたは考えられる他の方法を使用できます。約。

これは、達成できることをよりよく理解できるようにするためのものです。

于 2009-02-12T09:52:39.537 に答える