【问题标题】:MVC3, multiple file upload, model bindingMVC3、多文件上传、模型绑定
【发布时间】:2012-03-09 16:25:26
【问题描述】:

有一个更新复杂模型的视图(事务)。 复杂模型具有可以有多个附件(文件)的属性, 这样用户可以以这种形式同时上传多个文件, 我正在尝试将这些文件保存到数据库中。

我已成功将多个文件发布到服务器, 以下博客文章 http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx.

但是,为了保存这些文件,以便我可以跟踪哪些文件属于复杂模型(事务)的哪个对象并因此稍后在适当的位置显示它们,我需要一些方法来关联上传到它所属的对象,但是由于所有文件都以“文件”的名称命名,所以我不知道如何使它工作。

这里是简化的复杂模型:

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 }

【问题讨论】:

    标签: asp.net-mvc-3 entity-framework file-upload model-binding


    【解决方案1】:

    在视图中为采购申请和投标结果创建单独的部分。像这样的:

    <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 
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      相关资源
      最近更新 更多