Html.BeginForm multipart/form-data formulaire de Téléchargement de Fichier-groupe de validation

J'ai un cshtml fichier à Télécharger des fichiers sur le serveur.

@using (Html.BeginForm("FileUpload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary();
<div class="alert alert-success alert-dismissible" role="alert">@ViewBag.Message</div>
<div class="form-horizontal">
<h4>Upload Data Documents</h4>
<hr />
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.project_id)
<div class="form-group">
<label class="control-label col-md-2">Some Other File</label>
<div class="col-md-10">
<input type="file" name="someOtherFile" class="form-control" />
<span class="field-validation-error" id="spanfilesomeOtherFile"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2">Results Comparison</label>
<div class="col-md-10">
<div class="form-group">
<div class="col-md-4">
<input type="file" name="FileUploadResultsComparison" class="form-control" placeholder=".col-md-4"/>
<span class="field-validation-error" id="spanfileResultsComparison"></span>
</div>
<div class="col-md-4">
@if (ViewData["Project"] != null)
{ 
@Html.DropDownList("resultsComp_project", (SelectList)ViewData["Project"], "Select a Project", new { @class = "form-control", @placeholder = ".col-md-4" })
}
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2">Memory Usage</label>
<div class="col-md-10">
<div class="form-group">
<div class="col-md-4">
<input type="file" name="FileUploadMemoryUsage" class="form-control" />
<span class="field-validation-error" id="spanfileMemoryUsage"></span>
</div>
<div class="col-md-4">
@if (ViewData["Project"] != null)
{
@Html.DropDownList("memUsage_project", (SelectList)ViewData["Project"], "Select a Project", new { @class = "form-control", @placeholder = ".col-md-4" })
}
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" name="Submit" id="btnSubmit" value="Upload Files" class="btn btn-default" />
</div>
</div>
}

Et mon Contrôleur est comme suit

[HttpPost]
public ActionResult FileUpload(HttpPostedFileBase file)
{
foreach (string upload in Request.Files)
{
if (!(Request.Files[upload] != null && Request.Files[upload].ContentLength > 0)) continue;
HttpPostedFileBase file = Request.Files[upload];
if (ModelState.IsValid)
{
if (file == null)
{
ModelState.AddModelError("File", "Please Upload Your file");
}
else if (file.ContentLength > 0)
{
int MaxContentLength = 1024 * 1024 * 3; //3 MB
string[] AllowedFileExtensions = new string[] { ".jpg", ".gif", ".png", ".pdf" };
if (!AllowedFileExtensions.Contains(file.FileName.Substring(file.FileName.LastIndexOf('.'))))
{
ModelState.AddModelError("File", "Please file of type: " + string.Join(", ", AllowedFileExtensions));
}
else if (file.ContentLength > MaxContentLength)
{
ModelState.AddModelError("File", "Your file is too large, maximum allowed size is: " + MaxContentLength + " MB");
}
else
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Content/Upload"), fileName);
file.SaveAs(path);
ModelState.Clear();
ViewBag.Message = "File uploaded successfully";
}
}
}
}
return View();
}

Le code ci-dessus fonctionne, y compris la validation de fichier. Cependant, je vais avoir des ennuis avec 2 choses à propos du "Projet" associé avec le fichier.

  1. Comment je send/return le Projet(id) associé à chaque fichier pour le contrôleur?
  2. Comment puis-je valider de manière sélective la question de savoir si le "Projet" de liste Déroulante est sélectionné pour le fichier?
    par exemple (si je me parcourir et sélectionnez un fichier pour comment puis-je m'assurer qu'un correspondant "resultsComp_project" la valeur est sélectionnée dans la liste Déroulante? )

  3. comment puis-je associer le fichier et le projet, s'ils sont sélectionnés pour les deux (j'.e, nom="FileUploadMemoryUsage" & nom="FileUploadResultsComparison")

Veuillez noter que l'Utilisation de la Mémoire de l'information peut être null, code seulement traiter un fichier & projet si elles sont saisies.

OriginalL'auteur You Rule Avi | 2014-11-18