0

ASP.Net Webformsページは大規模なフォームにラップされており、ネストされたフォームは機能しないため、ページ上の他のフォームが制限されます。Webフォームプロジェクトでは、ページごとに1つのフォームしか存在できず、サーバーとクライアントのすべての対話でそれが必要になるため、これは意図的なものです。カスタムフォームを作成するために、このようにモーダルダイアログを作成しまし。サーバーからの適切なエラーメッセージを許可するために、私のモーダルダイアログはそれ自体にポストバックする必要があります。これを行うために、私はこのトリックに従って、ダイアログが表示されているウィンドウの名前としてフォームターゲットを使用しました。

ファイルをダウンロードするためのボタンを追加しようとすると、問題が発生します。このダイアログからファイルをダウンロードしようとしても、何も起こりません。問題のファイルに応答をリダイレクトすることはできますが、ボタンをクリックするとダイアログボックスがそこに表示され、何も起こらないため、ファイルを応答に書き込むことができません。

4

1 に答える 1

2

かなりの時間をかけて小さなテストケースを調査して構築した後、ここにはいくつかの興味深い要素があることがわかりました。

  1. Response.WriteFile()は、フォームが現在のウィンドウのターゲットで設定されている場合でも、Webフォームで正常に機能します。
  2. フォームが現在のウィンドウのターゲットに設定されていない限り、モーダルダイアログはファイルを完全に正常にダウンロードできます。

徹底的なテストを通して、これはあいまいなバグ、またはおそらくセキュリティの奇妙な試みでさえあるように見えます。これもIE8に固有のようですが、他のバージョンのIEをテストすることはできませんでした。

モーダルダイアログ内でのダウンロードを許可する秘訣は、フォームのターゲットを変更することです。

function downloader() {
    document.getElementById("form1").target = "_blank";
}

これによりIEのバグが修正され、他のすべてのブラウザで機能するように見えます(ただし、「すべてのポップアップを許可」を使用しても、Operaにポップアップを表示させることはできませんでした)。

私の苦労の日は無駄になるべきではないと思ったし、これは将来誰かを助けるかもしれない。

于 2012-10-12T11:58:25.807 に答える