Ich versuche, eine Datei mit HTML FileUpload-Steuerelement in MVC hochzuladen. Ich möchte die Datei validieren, um nur bestimmte Erweiterungen zu akzeptieren. Ich habe versucht, das FileExtensions-Attribut des DataAnnotations-Namespace zu verwenden, aber es funktioniert nicht. Siehe Code unten -FileExtensions-Attribut von DataAnnotations funktioniert nicht in MVC
public class FileUploadModel
{
[Required, FileExtensions(Extensions = (".xlsx,.xls"), ErrorMessage = "Please select an Excel file.")]
public HttpPostedFileBase File { get; set; }
}
In der Steuerung, ich schreibe den Code wie unten -
[HttpPost]
public ActionResult Index(FileUploadModel fileUploadModel)
{
if (ModelState.IsValid)
fileUploadModel.File.SaveAs(Path.Combine(Server.MapPath("~/UploadedFiles"), Path.GetFileName(fileUploadModel.File.FileName)));
return View();
}
In View, ich habe unten Code geschrieben -
@using (Html.BeginForm("Index", "FileParse", FormMethod.Post, new { enctype = "multipart/form-data"}))
{
@Html.Label("Upload Student Excel:")
<input type="file" name="file" id="file"/>
<input type="submit" value="Import"/>
@Html.ValidationMessageFor(m => m.File)
}
Wenn ich das laufen Anwendung und geben Sie eine ungültige Dateierweiterung, es zeigt mir nicht die Fehlermeldung. Ich bin mir der Lösung bewusst, ein benutzerdefiniertes Validierungsattribut zu schreiben, aber ich möchte kein benutzerdefiniertes Attribut verwenden. Bitte weisen Sie darauf hin, wo ich falsch liege.
könnte hilfreich sein: http://stackoverflow.com/questions/14718425/cant-get-mvc-4-fileextensions-attribute-to-work-on-viewmodel-property – serhiyb
@ serhiyb Danke für deine Antwort. Ich habe diese Lösung durchgemacht. Aber ich möchte kein benutzerdefiniertes Attribut verwenden, ich möchte ein Attribut verwenden, das bereits von .NET bereitgestellt wird. Mache ich etwas falsch oder gibt es ein Problem in Microsoft bereitgestellten Attribut? – DfrDkn
Da das FileExtensions-Attribut in MVC5 funktioniert (gerade getestet), nehme ich an, dass es in niedrigeren Versionen ein Problem damit gibt. – serhiyb