2016-07-12 19 views
1
私は自分のアプリケーションにPDFファイルをアップロードしたい

アップロードpdfファイル

だから私は持っているViewModelに(私は、関連するコードをポスト)

public class SubcategoryViewModel 
{ 
    public HttpPostedFileBase PdfFile { get; set; } 
    [DisplayName("PDF")] 
    public string Pdf { get; set; } 
} 

コントローラー:

public async Task<string> CreateSubcategory(SubcategoryViewModel model) 
    { 
       string pdf = null; 
      if (model.Pdf != null) 
      { 
       pdf = Guid.NewGuid().ToString().Substring(0, 13) + "_" + model.File.FileName; 
       model.Pdf = pdf; 
       var path = Path.Combine(HttpContext.Current.Server.MapPath("~/Content/pdf"), pdf); 
       model.File.SaveAs(path); 
      } 

      var subcategory = new Subcategory 
      { 
       Pdf = pdf, 
      }; 
      db.SubcategoriesList.Add(subcategory); 
      await db.SaveChangesAsync(); 

ビュー:

@model Models.ViewModels.SubcategoryViewModel 
@using (Html.BeginForm("Create", "Subcategory", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
<div class="form-group"> 
     @Html.LabelFor(model => model.Pdf, new { @class = "control-label col-md-2" }) 
     <div class="col-md-10 legend-size"> 
      <input type="file" id="file" name="file" /> 
     </div> 
    </div> 

私がアクション投稿をしたときモデルに何も受け取られていません.PDF、if (model.Pdf != null)バリデーションにはnullがありますが、理由はわかりません

なぜそれが発生するのでしょうか?前もって感謝します!

+0

あなたの質問は不明です。あなたのフォームにはプロパティ 'Pdf'のフォームコントロールがありませんので、投稿時に常に' null'になります(ただし、どうしてその値を投稿する必要があるのか​​不明です) –

+0

ユーザーからpdfファイルをアップロードして保存したいそれをパスに入れてから、私のインデックスビューで@StephenMueckeを表示させたい。 – Gerry

+0

公開ストリングPdf {get;セット; }?ファイル名? – MichaelMao

答えて

1

あなたには2つの主な問題があります。まずファイル入力の名前はname="file"ですが、これはモデルのプロパティと一致しません。それは

<input type="file" name="PdfFile" /> 

セカンドにする必要があり、あなたはPOSTメソッドでそうプロパティstring Pdfのための入力を生成することはありません、それは常にnullになりますので、ごif (model.Pdf != null)内部のコードが実行されることはありません。ファイルは、すなわち(名前を表示するために、私はまた、あなたのモデルでは、追加のプロパティをお勧めします:コードは

public async Task<string> CreateSubcategory(SubcategoryViewModel model) 
{ 
    string fileName = null; 
    if (model.PdfFile != null && model.PdfFile .ContentLength > 0) 
    { 
     fileName = Guid.NewGuid().ToString().Substring(0, 13) + "_" + model.PdfFile.FileName; 
     string path = Path.Combine(HttpContext.Current.Server.MapPath("~/Content/pdf"), fileName); 
     model.PdfFile.SaveAs(path); 
    } 
    var subcategory = new Subcategory 
    { 
     Pdf = fileName , 
    }; 
    db.SubcategoriesList.Add(subcategory); 
    await db.SaveChangesAsync(); 

サイドノートれる必要があるので、しかし、あなたが本当に欲しいのは、そのnullでない場合は、ファイルを保存することですmodel.PdfFile.FileName)、ユーザにはほとんど意味がないGuidの接頭辞が付いた名前を表示するのではなく、ビューでその値を使用できるようになります。例についてはthis answerを参照してください。

0

あなたの問題は、あなたのモデルのPdfFileプロパティでnull値を取得していると思います。これは、ファイルのアップロード制御の属性があなたと同じ属性nameを与えていないためです。ファイルアップロードコントロールのname属性をPdfFileに変更してください。

<input type="file" id="file" name="PdfFile" /> 
関連する問題