2012-12-14 82 views
1

在按钮单击无效的转换异常

Protected Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click 
     MsgBox("INSIDE") 
     If SocialAuthUser.IsLoggedIn Then 
      Dim accountId As Integer = BLL.getAccIDFromSocialAuthSession 
      Dim AlbumID As Integer = BLL.createAndReturnNewAlbumId(txtStoryTitle.Text.Trim, "") 
      Dim URL As String = BLL.getAlbumPicUrl(txtStoryTitle.Text.Trim) 
      Dim dt As New DataTable 
      dt.Columns.Add("PictureID") 
      dt.Columns.Add("AccountID") 
      dt.Columns.Add("AlbumID") 
      dt.Columns.Add("URL") 
      dt.Columns.Add("Thumbnail") 
      dt.Columns.Add("Description") 
      dt.Columns.Add("AlbumCover") 
      dt.Columns.Add("Tags") 
      dt.Columns.Add("Votes") 
      dt.Columns.Add("Abused") 
      dt.Columns.Add("isActive") 
      Dim Row As DataRow 

      Dim uniqueFileName As String = "" 
      If Session("ID") Is Nothing Then 
       lblMessage.Text = "You don't seem to have uploaded any pictures." 
       Exit Sub 
      Else 


**Dim FileCount As Integer = Request.Form(Request.Form.Count - 2)** 
       Dim FileName, TargetName As String 
       Try 
        Dim Path As String = Server.MapPath(BLL.getAlbumPicUrl(txtStoryTitle.Text.Trim)) 
        If Not IO.Directory.Exists(Path) Then 
         IO.Directory.CreateDirectory(Path) 
        End If 
        Dim StartIndex As Integer 
        Dim PicCount As Integer 
        For i As Integer = 0 To Request.Form.Count - 1 
         If Request.Form(i).ToLower.Contains("jpg") Or Request.Form(i).ToLower.Contains("gif") Or Request.Form(i).ToLower.Contains("png") Then 
          StartIndex = i + 1 
          Exit For 
         End If 
        Next 
        For i As Integer = StartIndex To Request.Form.Count - 4 Step 3 
         FileName = Request.Form(i) 
         '## If part here is not kaam ka..but still using it for worst case scenario 
         If IO.File.Exists(Path & FileName) Then 
          TargetName = Path & FileName 
          'MsgBox(TargetName & "--- 1") 
          Dim j As Integer = 1 
          While IO.File.Exists(TargetName) 
           TargetName = Path & IO.Path.GetFileNameWithoutExtension(FileName) & "(" & j & ")" & IO.Path.GetExtension(FileName) 
           j += 1 
          End While 
         Else 
          uniqueFileName = Guid.NewGuid.ToString & "__" & FileName 
          TargetName = Path & uniqueFileName 

         End If 
         IO.File.Move(Server.MapPath("~/TempUploads/" & Session("ID") & "/" & FileName), TargetName) 
         PicCount += 1 
         Row = dt.NewRow() 
         Row(1) = accountId 
         Row(2) = AlbumID 
         Row(3) = URL & uniqueFileName 
         Row(4) = "" 
         Row(5) = "No Desc" 
         Row(6) = "False" 
         Row(7) = "" 
         Row(8) = "0" 
         Row(9) = "0" 
         Row(10) = "True" 
         dt.Rows.Add(Row) 
        Next 
        If BLL.insertImagesIntoAlbum(dt) Then 

         lblMessage.Text = PicCount & IIf(PicCount = 1, " Picture", " Pictures") & " Saved!" 
         lblMessage.ForeColor = Drawing.Color.Black 
         Dim db As SqlDatabase = Connection.connection 
         Using cmd As DbCommand = db.GetSqlStringCommand("SELECT PictureID,URL FROM AlbumPictures WHERE [email protected] AND [email protected]") 
          db.AddInParameter(cmd, "AlbumID", Data.DbType.Int32, AlbumID) 
          db.AddInParameter(cmd, "AccountID", Data.DbType.Int32, accountId) 
          Using ds As DataSet = db.ExecuteDataSet(cmd) 
           If ds.Tables(0).Rows.Count > 0 Then 
            ListView1.DataSource = ds.Tables(0) 
            ListView1.DataBind() 
           Else 
            lblMessage.Text = "No Such Album Exists." 
           End If 

          End Using 
         End Using 
         'WebNavigator.GoToResponseRedirect(WebNavigator.URLFor.ReturnUrl("~/Memories/SortImages.aspx?id=" & AlbumID)) 
        Else 
         'TODO:we'll show some error msg 
        End If 

       Catch ex As Exception 
        MsgBox(ex.Message) 
        lblMessage.Text = "Oo Poop!!" 
       End Try 
      End If 
     Else 
      WebNavigator.GoToResponseRedirect(WebNavigator.URLFor.LoginWithReturnUrl("~/Memories/CreateAlbum.aspx")) 
      Exit Sub 
     End If 

    End Sub 

上面的代码工作fine.I已经在页面中添加一个更新面板,以避免回传,但是当我添加按钮单击作为在更新面板触发

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="btnSubmit" /> 
</Triggers> 

避免后回来,我得到当我添加按钮单击作为触发更新面板下面error.This发生。

enter image description here

回答

1

Request.Form返回NameValueCollection这是关键的名称或int索引访问。它总是返回String而不是Integer

Dim FileCount As String = Request.Form(Request.Form.Count - 2) 
+0

但为什么当我不添加按钮作为触发更新面板它的工作? – user1593175

+0

@ user1593175:1.我强烈建议将'OPTION STRICT'设置为'ON'。那么它甚至不会编译。 2.它工作的原因是'Request.Forms'中的值返回一些不能用触发器转换为'Integer'的值。您应该使用调试器来比较两个值是否带触发器。您可能还想使用名称,而不是容易出错的索引。 –

+0

当我将FileCount更改为字符串'Dim FileCount As String'时,我得到'FileCount = True',但没有添加按钮来更新面板触发器与Dim FileCount As Integer'我得到'FileCount = 15' – user1593175

0

这是从异常消息都直觉,但上线

FileCount As Integer = Request.Form(Request.Form.Count - 2) 

它看起来像Request.Form(Request.Form.Count - 2)是一个字符串,你想尝试将其分配给一个整数类型。

我不知道你在做什么,但字符串看起来像它包含“真”你想要以下吗?

FileCount As Integer += Boolean.Parse(Request.Form(Request.Form.Count - 2)) ? 1 : 0; 
+0

是的,你是对的。但是,当我不添加按钮作为更新面板的触发器时,完全相同的代码工作? – user1593175

+0

@ user1593175我猜测它的工作原理是因为不正确的代码不会执行 –

+0

我已经使用[这里]的代码(http://www.codeproject.com/Articles/240403/Multiple-Fileupload-for-ASP -NET-with-Client-Side-R)最后一个代码块......你可以解释一下为什么作者从Request.Form.Count中减去2 – user1593175