2012-04-07 100 views
0

的大小非负少而试图验证我的网页上表单数据,我得到以下错误:索引超出范围。必须大于集合

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

我对这个页面的代码是:

@{ 
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> 

错误显然是与线12,这意味着应该有一些错误:var fileData = Request.Files[0];

+0

那么,你认为发生在Request.Files是一个空数组?你试图访问第一个元素? – Konerak 2012-04-07 10:01:35

+0

那么我该如何让它非空? – mhcodner 2012-04-07 10:43:22

回答

1

如果试图通过索引时,有没有上传的文件引用Request.Files,你会得到这个错误。您的代码在页面首次加载时运行,因此用户没有机会上传文件,这意味着Request.Files必须为空。

移动if(IsPost)你的声明fileData和检查Request.Files的计数上述企图在它引用任何事情之前:

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

是的,谢谢,但我设法解决它自己除外为什么我需要检查request.files的长度? – mhcodner 2012-04-11 11:33:45

+0

对不起 - 应该是计数,而不是长度。 – 2012-04-12 04:55:02

相关问题