views:

1074

answers:

1

I'm trying to upload a file in VB.NET using an HtmlInputFile, but everytime I upload, the HtmlInputFile's PostedFile is Nothing.

Here is my ASP.NET code:

    <form id="Form1" method="post" runat="server" enctype="multipart/form-data">
        <asp:DataGrid id="dgTitles" runat="server" OnUpdateCommand="dgUpdate" DataKeyField="ID">
          <Columns>
            <asp:TemplateColumn HeaderText="Title" >
                <ItemTemplate>
                    <asp:Label ID="lTitle" Runat="server">
                        <%# DataBinder.Eval(Container, "DataItem.Title" )%>
                    </asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="tTitle" Runat="server" text='<%# DataBinder.Eval(Container, "DataItem.Title" )%>'>
                    </asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateColumn>
            <asp:TemplateColumn HeaderText="Image"> 
                <EditItemTemplate>
                    <input id='fuEditImage' type="file" name="fuEditImage" runat="server" enctype="multipart/form-data" />
                </EditItemTemplate>
            </asp:TemplateColumn
            <asp:EditCommandColumn UpdateText="Update">
            </asp:EditCommandColumn>
         </Columns>
        </asp:DataGrid>
    </form>

Here is my VB.NET code:

    Sub dgUpdate(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
        Try
            Dim Title = CType(e.Item.FindControl("tTitle"), TextBox).Text
            Dim fuUpload As System.Web.UI.HtmlControls.HtmlInputFile = CType(e.Item.FindControl("fuEditImage"),  _
                System.Web.UI.HtmlControls.HtmlInputFile)

            If Not fuUpload.PostedFile Is Nothing Then 'This always = false
                If Not fuUpload.PostedFile.FileName = "" Then
                    UploadImage(fuUpload)
                End If
            End If
        Catch ex As Exception
           'Handle Exception here
        End Try
    End Sub

When I upload a file, fuUpload is not Nothing, but fuUpload.PostedFile is.
The inputted "Title" text is recognized no problem.
I've also tried with FileUpload object and tag, instead of input tag and HtmlInputFile-- same result.
Here is the output of ?fuUpload when I use an input tag & HtmlInputFile:

    {System.Web.UI.HtmlControls.HtmlInputFile}
    Accept: ""
    AppRelativeTemplateSourceDirectory: "~/app/admin/points/"
    Attributes: {System.Web.UI.AttributeCollection}
    BindingContainer: {System.Web.UI.WebControls.DataGridItem}
    ClientID: "dgTitles__ctl4_fuEditImage"
    Controls: {System.Web.UI.EmptyControlCollection}
    Disabled: False
    EnableTheming: True
    EnableViewState: True
    ID: "fuEditImage"
    MaxLength: -1
    Name: "dgTitles:_ctl4:fuEditImage"
    NamingContainer: {System.Web.UI.WebControls.DataGridItem}
    Page: {ASP.app_admin_points_pointtitles_aspx}
    Parent: {System.Web.UI.WebControls.TableCell}
    PostedFile: Nothing
    Site: Nothing
    Size: 45
    SkinID: ""
    Style: {System.Web.UI.CssStyleCollection}
    TagName: "input"
    TemplateControl: {ASP.app_admin_points_pointtitles_aspx}
    TemplateSourceDirectory: "/community/app/admin/points"
    Type: "file"
    UniqueID: "dgTitles:_ctl4:fuEditImage"
    Value: ""
    Visible: True

Here is the output of ?fuUpload if I'm using a FileUpload object and tag:

    {System.Web.UI.WebControls.FileUpload}
    AccessKey: ""
    AppRelativeTemplateSourceDirectory: "~/app/admin/points/"
    Attributes: {System.Web.UI.AttributeCollection}
    BackColor: "{Name=0, ARGB=(0, 0, 0, 0)}"
    BindingContainer: {System.Web.UI.WebControls.DataGridItem}
    BorderColor: "{Name=0, ARGB=(0, 0, 0, 0)}"
    BorderStyle: NotSet {0}
    BorderWidth: {System.Web.UI.WebControls.Unit}
    ClientID: "dgTitles__ctl4_fuEditImage"
    Controls: {System.Web.UI.ControlCollection}
    ControlStyle: {System.Web.UI.WebControls.Style}
    ControlStyleCreated: True
    CssClass: ""
    Enabled: True
    EnableTheming: True
    EnableViewState: True
    FileBytes: {Length=0}
    FileContent: {System.IO.Stream.NullStream}
    FileName: ""
    Font: {System.Web.UI.WebControls.FontInfo}
    ForeColor: "{Name=0, ARGB=(0, 0, 0, 0)}"
    HasAttributes: False
    HasFile: False
    Height: {System.Web.UI.WebControls.Unit}
    ID: "fuEditImage"
    NamingContainer: {System.Web.UI.WebControls.DataGridItem}
    Page: {ASP.app_admin_points_pointtitles_aspx}
    Parent: {System.Web.UI.WebControls.TableCell}
    PostedFile: Nothing
    Site: Nothing
    SkinID: ""
    Style: {System.Web.UI.CssStyleCollection}
    TabIndex: 0
    TemplateControl: {ASP.app_admin_points_pointtitles_aspx}
    TemplateSourceDirectory: "/community/app/admin/points"
    ToolTip: ""
    UniqueID: "dgTitles:_ctl4:fuEditImage"
    Visible: True
    Width: {System.Web.UI.WebControls.Unit}

Can anyone tell me what I'm doing wrong? Why is PostedFile always nothing?
Thanks!