14

次のコード スニペットを使用して、クライアントに送信する 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/file の内容をクライアントのブラウザに送信し、Response.Write を含まない「開く/保存」ダイアログを表示する別の方法は何ですか?

4

4 に答える 4

39

Response.Write非同期ポストバック中は使用できません。PostBackTriggerそのコードを実行するコントロールが何であれ、更新パネルにとして追加する必要があります。

<Triggers>        
    <asp:PostBackTrigger ControlID="Button1" />
</Triggers>

必要に応じて、コード ビハインドでも実行できます。

ScriptManager.GetCurrent().RegisterPostBackControl(Button1);
于 2012-04-04T16:15:02.933 に答える
1

vcardを提供するために別のハンドラー/ページを使用することを検討してみませんか?

これはおそらくそれを行うための最も簡単でクリーンな方法であり、updatepanelに関連する他の(非同期かどうかに関係なく)ポストバックに干渉しません。

于 2012-09-26T10:09:01.443 に答える
1

Response.Write は Asynchronous Events では機能しません。特に VCard の観点からのみ使用されている場合は、更新パネルを削除することをお勧めします。

または、更新パネル内にコントロールを配置し、非同期イベントでその値を初期化します。これで動作します。

于 2012-04-04T18:49:29.620 に答える
1

にも同様の問題がありましたResponse.Write。この問題の回避策または解決策を見つけました。サーバー コントロールのTextWriter指定されたをキャプチャし、それに書き込みます。RenderBeginTag

ここに例をブログに書きました: http://timscyclingblog.wordpress.com/2013/03/07/asp-net-web-forms-response-write-in-an-updatepanel-dev-web/

于 2013-03-07T22:11:26.287 に答える