8 Stimmen

Validierung von Eingabedateien mit jquery und dataannotation in asp.net mvc 3

Ich bin sicher, dass ich hier etwas übersehe, aber ich fand este Frage zur Validierung einer Datei, hier der Beispielcode

public class UpdateSomethingViewModel 
{
    [DisplayName("evidence")]
    [Required(ErrorMessage="You must provide evidence")]
    [RegularExpression(@"^abc123.jpg$", ErrorMessage="Stuff and nonsense")]
    public HttpPostedFileBase Evidence { get; set; }
}

aber ich sehe keine @Html.FileFor(model => model.Evidence)

Irgendwelche Ideen?

Update

Ich habe eine einfache Lösung gefunden, bei der der Attributtyp in der html-Attributsammlung übergeben wird.

 @Html.TextBoxFor(model => model.Evidence, new { type = "file" })
 @Html.ValidationMessageFor(model => model.Evidence)

13voto

k-dev Punkte 1657

Ich habe eine einfache Lösung gefunden, indem ich das Attribut type in der html-Attributsammlung.

@Html.TextBoxFor(model => model.Evidence, new { type = "file" })
@Html.ValidationMessageFor(model => model.Evidence)

3voto

Darin Dimitrov Punkte 990883

Ich fürchte, Sie können dies nicht mit Datenanmerkungen tun. Sie könnten dies in der Controller-Aktion tun, die die Anfrage bearbeiten soll:

Modell:

public class UpdateSomethingViewModel 
{
    [DisplayName("evidence")]
    [Required(ErrorMessage = "You must provide evidence")]
    public HttpPostedFileBase Evidence { get; set; }
}

Aktion:

[HttpPost]
public ActionResult Foo(UpdateSomethingViewModel model)
{
    if (model.Evidence != null && model.Evidence.ContentLength > 0)
    {
        // the user uploaded a file => validate the name stored
        // in model.Evidence.FileName using your regex and if invalid return a
        // model state error
        if (!Regex.IsMatch(model.Evidence.FileName, @"^abc123.jpg$"))
        {
            ModelState.AddModelError("Evidence", "Stuff and nonsense");
        }
    }
    ...
}

Beachten Sie auch, dass es besser ist, die HttpPostedFileBase und nicht die konkrete HttpPostedFileWrapper in Ihr Modell eingeben. Dies wird Ihnen das Leben leichter machen, wenn Sie Unit-Tests für diese Controller-Aktion schreiben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X