2013-05-29 113 views
0

首先,我是新手,所以請原諒我的無知,瀏覽文件在創建視圖MVC4

在我的表,我有我想要的UNC路徑存儲爲PDF文件中的列。我想在我的視圖上有一個按鈕,這將允許用戶瀏覽並選擇與該記錄關聯的文件。 (在幕後,我將把文件複製到指定的文件位置並重命名它)我發現了很多如何瀏覽文件的例子,但我無法弄清楚如何讓這個工作在Create和編輯視圖並將其餘數據保存回數據庫。

在我創建的看法,我已經修改了BeginForm像這樣:

@using (Html.BeginForm("FileUploadCreate", "GL", FormMethod.Post, new { enctype = "multipart/form-data" })) 

對於我的列來存儲PDF的位置,我有:

@Html.TextBoxFor(Model => Model.PDF, null, new { type="file"}) 

我的控制器有:

 [HttpPost] 
    public ActionResult FileUploadCreate(HttpPostedFileBase PDF) 
    { 
     string path = ""; 
     if (PDF != null) 
     { 
      if (PDF.ContentLength > 0) 
       { 
        string fileName = Path.GetFileName(PDF.FileName); 
        string directory = "c:\\temp\\Accruals\\PDF"; 
        path = Path.Combine(directory, fileName); 
        PDF.SaveAs(path); 

       } 
     } 

     return RedirectToAction("Index"); 
    } 

這一切都工作得很好,文件被複制到適當的測試文件夾。

 [HttpPost] 
    public ActionResult Create(NonProject myRecord) 
    { 
     try 
     { 
      _repository.AddNonProject(myRecord); 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 

      return View(); 
     } 
    } 

什麼我需要做的:但是,因爲我的實際建立後從未得到擊中我的記錄永遠不會保存到數據庫?如何在我的Create中引用我的NonProject對象?我可以添加一些東西到我的BeginForm也傳遞給FileUploadCreate?

回答

1

將發佈的文件作爲參數添加到您的Create操作方法中。兩者(文件到磁盤和形式值DB)保存

[HttpPost] 
public ActionResult Create(NonProject myRecord, HttpPostedFileBase PDF) 
{ 
    try 
    { 
     //Save PDF here    
     // Save form values to dB 
    } 
    catch 
    { 
     //Log error show the view with error message 
     ModelState.AddModelError("","Some error occured"); 
     return View(myRecord); 
    } 
} 

確保您的形式行動方法設置爲Create

+0

唉唉。太簡單。我只需將NonProject myRecord添加到FileUploadCreate(因爲這是從BeginForm中調用的那個)。感謝您指點我正確的方向。 –

0

您應該所有的數據發佈到一個動作:

視圖模型:

public class NonProject 
{ 
    public HttpPostedFileBase PDF{get;set;} 

    public string SomeOtherProperty {get;set;} 
    ..... 
} 

查看:

@using (Html.BeginForm("FileUploadCreate", "GL", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.TextBoxFor(Model => Model.PDF, null, new { type="file"}) 

    @Html.TextBoxFor(Model => Model.SomeOtherProperty) 

etc.. 
} 

控制器:

[HttpPost] 
public ActionResult FileUploadCreate(NonProject myRecord) 
{ 
    string path = ""; 

    if (myRecord.PDF != null) 
    { 
     if (myRecord.PDF.ContentLength > 0) 
      { 
       string fileName = Path.GetFileName(myRecord.PDF.FileName); 
       string directory = "c:\\temp\\Accruals\\PDF"; 
       path = Path.Combine(directory, fileName); 
       myRecord.PDF.SaveAs(path); 

      } 
    } 
    try 
    { 
     _repository.AddNonProject(myRecord); 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 

     return View(); 
    } 


    return RedirectToAction("Index"); 
} 
相關問題