次のコードスニペットを使用して、クライアントに送信するvcardを生成します。
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileNameOnly));
Response.ContentType = "text/x-vcard";
Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1");
Response.Write(vCard.ToString());
Response.End();
ただし、内部にコントロールがあり、UpdatePanelがあるページでvCardを使用する必要があります。残念ながら、 更新パネルと応答書き込み によると、これは機能せず、エラーが発生します。 vcard /ファイルの内容をクライアントのブラウザに送信し、Response.Writeを含まない「開く/保存」ダイアログを表示させる別の方法は何ですか?
非同期ポストバック中にResponse.Write
を使用することはできません。そのコードを実行するコントロールはすべて、更新パネルにPostBackTrigger
として追加する必要があります。
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
必要に応じて、コードビハインドで実行することもできます。
ScriptManager.GetCurrent().RegisterPostBackControl(Button1);
Vcardを提供するために別のハンドラー/ページを使用することを検討してみませんか?
これはおそらくそれを行うための最も簡単でクリーンな方法であり、updatepanelに関連する他の(非同期かどうかに関係なく)ポストバックを妨害しません。
Response.Write
でも同様の問題が発生しました。私はこの問題の回避策またはおそらく解決策を見つけました。サーバーコントロールのTextWriter
に与えられたRenderBeginTag
をキャプチャし、それに書き込みます。
ここに例を挙げてブログを書きました: http://timscyclingblog.wordpress.com/2013/03/07/asp-net-web-forms-response-write-in-an-updatepanel-dev-web/
Response.Writeは非同期イベントでは機能しません。私の提案は、更新パネルがVCardの観点からのみ使用されている場合は、更新パネルを削除することです。
または-更新パネル内にコントロールを配置し、非同期イベントでその値を初期化します。今それは動作します。