Ich habe 2 Szenarien, die ich brauche etwas Hilfe mit re Validierung in meinem ASP.NET MVC-Anwendung. Ich bin mir bewusst, dass mit Validierung innerhalb des Controllers nicht ideal ist, so bin auf der Suche, um diese anderswo zu halten - vielleicht mit meinen Modellen, wo ich kann.
1) Ich habe ein Modell mit verschiedenen Eigenschaften, von denen einige Validierung gegen sie mit DataAnnotations haben. Ich bin dann mit der Html-Hilfsmethoden innerhalb meiner Ansicht, um alle Validierungsfehler gegen die relevanten Felder aufzudecken. Für den größten Teil, diese Arbeit wie erwartet. Die Ausnahme, die ich habe, ist, wo eines der Felder in meiner Ansicht eine Dropdown-Liste ist. Das erste Element in meiner Liste ist leer/leer, der Rest sind echte Werte. Die Eigenschaft in meinem Modell, dass dieses Feld bezieht sich auf die folgenden gegen sie hat:
[Required(ErrorMessage = "A value from the list is required")]
Derzeit, wenn ich den Standardwert in der Liste (leer) und nicht wählen Sie einen echten Wert aus der Liste, ich möchte es die Validierung Fehlermeldung zu machen, aber es ist derzeit behandeln es, als ob es ein gültiger Wert waren, und die Validierung übergeben.
Wie kann ich erreichen, dass die Validierung fehlschlägt, wenn das leere Listenelement übermittelt wird?
2) In einer meiner Ansichten habe ich einige Steuerelemente zum Hochladen von Dateien, mit denen der Benutzer Bilder auf die Website hochladen kann. Diese Felder sind nicht direkt an irgendwelche Eigenschaften innerhalb meines Modells gebunden - nur die resultierenden Dateinamen (sobald die Datei hochgeladen, konvertiert, umbenannt usw.) werden dann den Eigenschaften "Dateiname1", "Dateiname2" usw. innerhalb meines Modells zugewiesen.
Ich frage mich also, wie ich am besten überprüfen kann, dass diese obligatorischen Dateien hochgeladen werden? Derzeit tue ich das folgende für jede der Dateiupload-Steuerelemente, innerhalb meiner Controller(!):
HttpPostedFileBase file = null;
file = Request.Files["Filename1"];
if (file != null && file.ContentLength == 0)
ModelState.AddModelError("Filename1", "Image1 is required");
Sobald dies für jedes der Dateiupload-Steuerelemente geschehen ist, prüfe ich, ob der ModelState gültig ist:
if (ModelState.IsValid)
Ich bin sicher, dass es eine bessere Möglichkeit gibt, diese Validierung durchzuführen, und ich könnte mir vorstellen, dass es nicht ideal ist, dies im Controller zu haben, aber ich bin mir nicht sicher, wie man dies am besten handhabt.
Ich wäre für jede Hilfe bei diesen 2 Szenarien dankbar.