2017-10-02 31 views
0

私は呼び出し可能なコントローラアクションを持っており、バイト配列からpdfファイルを返します。これは正常に動作し、私は私の文書では、このかみそりのアクションでページに埋め込まれて表示することができます。MVC - ビューモデルにPDFを保存し、ビューに埋め込む?

<embed src="@Url.Action("Preview_PDF", "Doc", new { file_name = @Model })" width="100%" height="100%" type="application/pdf"></embed> 

代わりにビューモデルからファイルを埋め込むための方法はありますか?例えば

<embed src="@Model.file" width="100% " height="100%" type="application/pdf"></embed> 

は、私は、ファイルが静的な型であるとして、それは私のようにそれを宣言させません、私は私のモデルクラスに設定できるものではありません、私のコントローラから、「リターン・ファイル」を使用しています変数。

モデルからページにファイルを埋め込む方法を教えてください。私はバイト配列としてファイルを格納することができますが、私はビュー上でそれを再構築する方法を知らない。

答えて

2

可能ですが、ブラウザによっては結果が一貫しないことがあります。

最初の例では、実際に何も埋め込んでいません。 <EMBED>タグをPDFの場所に表示しています。ブラウザは実際にPDFを(別のHTTPリクエストで)取得する責任があります。したがって、最終ページにPDFが埋め込まれている間は、HTTPレスポンスに埋め込まれません。 @Model.fileは、ファイルを含むバイト配列である場合は、あなたがそう

<EMBED Src="data:application/pdf;base64,[Based64-encoded string]"> 

:あなたは、バイナリコンテンツは、HTML文書にインラインで表示されるように、何かを埋め込みたい場合は

、あなたは構文のこの種をたどるだろうそのようなマークアップを返すモデルに新しいプロパティを追加することによって、あなたが望むものを達成することができます

class MyModel 
{ 
    public string InlineMarkup 
    { 
     get 
     { 
      return String.Format("data:application/pdf;base64,{0}", Convert.ToBase64String(this.file)); 
     } 
    } 

...そして、あなたのビューで:

<embed src="@Model.InlineMarkup" width="100% " height="100%" type="application/pdf"> 

EMBEDvoid elementであるため、</EMBED>タグは必須ではなく、厳密には合法的ではありません。

this questionも参照してください。

+0

優れた答えをいただきありがとうございます。 –

関連する問題