MVC3, загрузка нескольких файлов, привязка модели - PullRequest
6 голосов
/ 09 марта 2012

Существует вид для обновления сложной модели (транзакция).Сложная модель имеет свойства, которые могут иметь несколько вложений (файлов), поэтому пользователь может загружать несколько файлов одновременно в этой форме, и я пытаюсь сохранить эти файлы в базе данных.

Я успешно разместил несколько файлов всервер, следуя сообщению в блоге 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 }

1 Ответ

8 голосов
/ 09 марта 2012

Создайте отдельные разделы для просмотра заявок и результатов торгов.Примерно так:

<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 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...