ASP.NET MVC 3: DataAnnotations.FileExtensionsAttribute nicht funktioniert
Laut der MSDN-Dokumentation standardmäßig die FileExtensionsAttribute (.NET 4.5) sollte mir erlauben nur das hochladen nur jpg -, jpeg -, gif-und png-Dateien - das ist, was ich will.
Habe ich versucht, das hochladen eines jpg ohne das Attribut, es funktioniert. Toll. Dann
Hinzugefügt habe ich das Attribut meiner Ansicht Modell..
[FileExtensions(ErrorMessage = "Please specify a valid image file (.jpg, .jpeg, .gif or .png)")]
public HttpPostedFileBase ImageFile { get; set; }
Keine Freude. Die überprüfung schlägt fehl, und die Fehlermeldung wird angezeigt. Auf top von, dass es scheint nicht ein Weg gefunden werden, geben Sie alle zulässigen benutzerdefinierten Dateierweiterungen.
Ich verlängerte die FileExtensionsAttribute und mit meiner eigenen überprüfung Logik, und die funktioniert wie erwartet. Aber warum nicht auf diese Weise arbeiten?
Post wird die gesamte Steuerung und anzeigen, falls erforderlich. Ich habe dieses Beispiel als Grundlage für das hochladen von Logik, aber mit den DataAnnotations.FileExtensionsAttribute anstelle von Microsoft.Web.Mvc.FileExtensions.. Wie lade ich Bilder in ASP.NET MVC?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die Erweiterungen - Eigenschaft festgelegt werden. Obwohl laut Dokumentation
Sie können Sie genauso wie die
ErrorMessage
. Die eher Problem ist, dass Sie nicht wissen, wie zu beurteilen, ob dieHttpPostedFileBase
hat die richtige Erweiterung. Sie müssen die benutzen, die vom MVC-framework oder erstellen Sie Ihre eigenen.Da Sich Das System.ComponentModel.DataAnnotations.FileExtensionsAttribute ist versiegelt. Ich nutze ein wrapper für MVC 4.
IClientValidatable
sollte es Strahlen die unaufdringliche jquery Attribute in htmlextension
gefunden in jQuery.Validation additional-methods.js beinhaltet bereits den '.' vor der Endung, daher der client die Validierung muss in den Erweiterungen, ohne den '.'. Ich habe es angesprochen, indem Sie die Zeilerule.ValidationParameters["extension"] = _innerAttribute.Extensions;
zurule.ValidationParameters["extension"] = _innerAttribute.Extensions.Replace(".","");
Ich weiß das ist ein bisschen zu spät, aber vielleicht kann jemand helfen gibt. Dies ist eine modifizierte version von @jfeinour, dass es funktionieren wird auf der client-Seite sowie:
Den FileExtensionsAttribute nicht wissen, wie um zu überprüfen, ein HttpPostedFileBase, so erweiterte ich es..
Beachten Sie, dass diese Methode zwingt die Datei-ein Pflichtfeld sein. Alternativ, wenn es ein optionales Feld, verwenden Sie den folgenden code für die Methode Körper. Diese immer wieder Erfolg, wenn keine Datei angegeben ist (wahrscheinlich mehr richtig in den meisten Fällen)..