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