2012-03-09 134 views
6

有一種更新複雜模型(交易)的視圖。 複雜模型具有可以具有多個附件(文件)的屬性, ,以便用戶可以以這種形式同時上傳多個文件, ,我試圖將這些文件保存到數據庫。MVC3,多文件上傳,模型綁定

我已經成功地發佈多個文件服務器, 以下博客文章 http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx

但是爲了保存這些文件,以便我可以跟蹤哪些文件屬於複雜模型(Transaction)的哪個對象,並因此稍後在適當的位置顯示它們,我需要一些方法將文件上傳到它屬於它的對象,但由於所有文件都屬於'文件'名稱,所以我不知道如何才能完成這項工作。

在這裏被簡化複雜的模型:的複雜模型

public class Transaction 
{ 
    [Key] 
    public int Id { get; set; } 

    public virtual PurchaseRequisition PurchaseRequisition { get; set; } 

    public virtual Evaluation Evaluation { get; set; } 
} 

性質:

public class PurchaseRequisition 
{ 
    [Key, ForeignKey("Transaction")] 
    public int TransactionId { get; set; } 

    public virtual Transaction Transaction { get; set; } 

    [Display(Name = "Specifications/Requisitioner's Notes")] 
    public virtual ICollection<Attachment> SpecsRequisitionerNotesFiles { get; set; } 
} 

public class Evaluation 
{ 
    [Key, ForeignKey("Transaction")] 
    public int TransactionId { get; set; } 

    public virtual Transaction Transaction { get; set; } 

    public virtual ICollection<Attachment> BidResultsFiles { get; set; } 
} 

public abstract class Attachment 
{ 
    [Key] 
    public int Id { get; set; } 

    public string FileName { get; set; } 

    public string FileExtension { get; set; } 

    public byte[] Data { get; set; } 

    public Boolean Deleted { get; set; } 
} 

這裏是控制器:

[HttpPost] 
public ActionResult Create(TransactionViewModel model, IEnumerable<HttpPostedFileBase> files) 
{ //save to database } 

回答

8

在購買該視圖創建獨立的部分請購單和投標結果。事情是這樣的:

<form action="" method="post" enctype="multipart/form-data"> 

    <h3>Purchase Requistions</h3> 
    <label for="file1">Filename:</label> 
    <input type="file" name="purchasereqs" id="file1" /> 

    <label for="file2">Filename:</label> 
    <input type="file" name="purchasereqs" id="file2" /> 

    <h3>Bid Results</h3> 
    <label for="file3">Filename:</label> 
    <input type="file" name="bidresults" id="file3" /> 

    <label for="file4">Filename:</label> 
    <input type="file" name="bidresults" id="file4" /> 

    <input type="submit" /> 
</form> 

那麼你將有一個動作的簽名是這樣的:

[HttpPost] 
public ActionResult Create(
    TransactionViewModel model, 
    IEnumerable<HttpPostedFileBase> purchasereqs, 
    IEnumerable<HttpPostedFileBase> bidresults) 
{ 
    //save to database 
} 
+0

那完美。謝謝!! – ljustin 2012-03-12 17:38:49