2012-04-07 5 views
0

Bei dem Versuch, Formulardaten auf meiner Seite zu validieren bekomme ich folgende Fehlermeldung:Index war außerhalb des Bereichs. Muss nicht negativ und kleiner als die Größe der Sammlung

System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index.

mein Code für diese Seite lautet:

@{ 
var db= Database.Open("Games"); 
var sqlQ = "SELECT * FROM Games"; 
var data = db.Query(sqlQ); 
Page.Title = "Add Game"; 
} 
@{ 
    var fileerrorMessage = ""; 
    var NameerrorMessage = ""; 
    var Gamefile = ""; 
    var GameName = ""; 
    var fileData = Request.Files[0]; 
    var fileName = Path.GetFileName(fileData.FileName); 
    var fileSavePath = Server.MapPath("~/upload/" + fileName); 
    GameName=Request["formName"]; 
    Gamefile=fileName; 
    if (IsPost) { 
    var isValid = true; 
     if (Gamefile.IsEmpty()){ 
      fileerrorMessage = "Please upload a file."; 
      isValid = false; 
     } 

     else if (GameName.IsEmpty()){ 
      NameerrorMessage = "Please give the game a name."; 
      isValid = false; 
     } 

     if (isValid){ 

     fileData.SaveAs(fileSavePath); 
     var SQLINSERT = "INSERT INTO Games (Name, file_path) " + "VALUES (@0, @1)"; 
     db.Execute(SQLINSERT, GameName, Gamefile); 
     Response.Redirect("default.cshtml"); 
     } 

     else 
     { 
      <p class="message error">Please correct the errors and resubmit the form.</P> 
     } 

    } 
} 
<form action="" method="post" enctype="multipart/form-data"> 

    <input type="file" name="file" id="file" /> 
    @if(!fileerrorMessage.IsEmpty()) { 
     <label for="file" class="validation-error"> 
      @fileerrorMessage 
     </label> 
    } 
    <p><input type="text" name="formName" value="@GameName" /> 
    @if(!NameerrorMessage.IsEmpty()) { 
     <label for="file" class="validation-error"> 
      @NameerrorMessage 
     </label> 
    } 

    <input type="submit" value="Add Game" /> 
</form> 

Der Fehler ist anscheinend mit Zeile 12. Das bedeutet, es sollte etwas falsch sein mit: var fileData = Request.Files[0];

+0

Nun, was denken Sie passiert, wenn Request.Files ein leeres Array ist? Und Sie versuchen, auf das erste Element zuzugreifen? – Konerak

+0

na dann wie mache ich es nicht leer? – mhcodner

Antwort

1

Wenn Sie versuchen, Request.Files per Index verweisen, wenn keine Dateien hochgeladen werden, erhalten Sie diesen Fehler. Ihr Code wird beim ersten Laden der Seite ausgeführt, sodass der Benutzer keine Möglichkeit zum Hochladen einer Datei hatte, was bedeutet, dass Request.Files leer sein muss.

Verschieben if(IsPost) über Ihre Erklärung oben für fileData und überprüfen Sie die Anzahl der Request.Files, bevor irgendetwas in ihm verweisen:

if(IsPost){ 
    if(Request.Files.Count > 0){ 
     var fileData = Request.Files[0]; 
     var fileName = Path.GetFileName(fileData.FileName); 
     var fileSavePath = Server.MapPath("~/upload/" + fileName); 
     //etc 
+0

Ja danke, aber ich habe es geschafft, es selbst zu beheben, außer warum sollte ich die Länge von request.files überprüfen? – mhcodner

+0

Sorry - das sollte Count sein, nicht Length. –

Verwandte Themen