2016-07-24 13 views
0

Ich verwende derzeit den folgenden Code, um zu bestätigen, dass die hochgeladene Datei von einem bestimmten Typ ist. Der Code, der Validation.IsValid verwendet, scheint jedoch alles zu ermöglichen und daher den Code auf das System hochzuladen.Validation.IsValid() validiert nicht Error Razor C#

Könnte jemand bitte Hilfe leisten?

Mit dem @ HTML.ValidationMessage kann ich sehen, der Fehler Validierung auftritt (dh, es werden nur CSV erlaubt)

Danke

@using Microsoft.Web.Helpers; 
    @{ 
     if(IsPost && @System.Web.HttpContext.Current.User.IsInRole("EHM\\Domain Admins")) { 
      if(Request.Files[0].ContentLength == 0){ 
       ModelState.AddError("fileUpload", "You must upload a file"); 

      } else { 
       var allowedExtensions = new[]{".csv"}; 
       var extension = Path.GetExtension(Request.Files[0].FileName.ToLower()); 
       if(!allowedExtensions.Contains(extension)){ 
        ModelState.AddError("fileUpload", "Only CSV are allowed"); 
       } 
      } 
      if(Validation.IsValid()) { 
       var fileName = ""; 
       var fileSavePath = ""; 
       var uploadedFile = Request.Files[0]; 
       fileName = Path.GetFileName(uploadedFile.FileName); 
       fileSavePath = Server.MapPath("~/App_Data/UploadedFiles/" + fileName); 
       uploadedFile.SaveAs(fileSavePath); 
      } 
      else { 
      <p class="bg-danger"> File has not been uploaded </p> 
      } 
     } 

    } 

edfef

@FileUpload.GetHtml(
    initialNumberOfFiles:1, 
    allowMoreFilesToBeAdded:false, 
    includeFormTag:true, 
    uploadText:"Upload CSV only") 
@Html.ValidationMessage("fileUpload") 

Antwort

0

Versuchen Sie, diese

ModelState.AddModelError(string.Empty, "Only CSV are allowed"); 

statt

ModelState.AddError("fileUpload", "Only CSV are allowed"); 

, um den Modellfehler mit einem leeren Schlüssel hinzuzufügen und ihn nicht an eine bestimmte Eigenschaft zu binden.
Hinweis: Normalerweise ist es besser, die richtige Eigenschaft in Ihr ViewModel einzufügen und die Validierung für diese Eigenschaft durchzuführen.

+0

Hallo Mok, ich habe das obige versucht, aber ich bekomme den folgenden Kompilierfehler. Welche Abhängigkeiten brauche ich dafür? CS1061: 'System.Web.WebPages.Html.ModelStateDictionary' enthält keine Definition für 'AddModelError' und es wurde keine Erweiterungsmethode 'AddModelError' gefunden, die ein erstes Argument des Typs 'System.Web.WebPages.Html.ModelStateDictionary' akzeptiert (fehlt dir eine using-Direktive oder eine Assembly-Referenz?) – GlenCloncurry

+0

Verwende 'System.Web.Mvc.ModelStateDictionary.AddModelError'. – mok