2

ブラウザを介して「標準」ドキュメントを正常に表示できるアプリケーションがいくつかあります。私は、インターネット上のほとんどのサンプルがドキュメントを表示するために使用する通常の方法を使用します。

HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.ClearContent();
response.ClearHeaders();
response.Buffer = true;
response.ContentType = "application/pdf";
response.AddHeader("Content-Disposition", "attachment;filename=file.pdf"; 
response.BinaryWrite(SomeBinaryArrayObject);
response.Flush();
response.End();

ただし、現在のアプリケーションでは、これはUpdatePanelから呼び出されており、これによりAJAXエラーが発生するようです(グーグルも確認しました)。

私が受け取ったエラーメッセージについては、ここをチェックしてください

Response.writeを使用する以外に、ブラウザからドキュメントを呼び出す他の方法があるかどうか、またはAJAX / Response.Writeの問題を回避する方法はあります?ブラウザで開くことをお勧めしますが、関連するアプリケーションで開く場合は、それでも問題ありません。いずれにせよ、すべてのクライアントにAdobeやMSOfficeなどがインストールされているとは限りません。

どんな助けでも大歓迎です!

4

1 に答える 1

4

ブラウザでドキュメントを呼び出す方法は他にありません(そうしないと、セキュリティ上の大きな問題になります)。唯一の回避策は、ダウンロードコントロールをUpdatePanelPostbackトリガーとして追加することです。これにより完全なポストバックが発生し、ブラウザが関連するアプリケーションをダウンロードおよび/またはアクティブ化できるようになります。

別の解決策は、フラッシュまたはJavaアプレットを使用することです。

更新:グリッドビュー内でポストバックコントロールを使用する場合、グリッド内のすべてのコントロールで完全なポストバックを発生させる必要はありません。常に、必要なコントロールでのみトリガーできます。rowdataboundイベントで、コントロールを検索し、次のようにトリガーに追加します。

Protected Sub gE_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gE.RowDataBound
    Dim lapt_Trig As New AsyncPostBackTrigger
    lapt_Trig.ControlID = e.Row.FindControl("MyButton").ID     
    up_UpdatePanel.Triggers.Add(lapt_Trig)    
End Sub
于 2012-06-14T07:17:18.073 に答える