none
FileUpload.HasFile só retorna False RRS feed

  • Pergunta

  • Salve!

    Projeto web com AJAX em VB2005.

    Tenho uma página com um UpdatePanel, sem <Triggers>, só com <ContentTemplate>. Dentro de um elemento <td> tenho um outro UpdatePanel, com <ContentTemplate> (onde encontram-se o controle FileUpload1 e um Button) e com <Triggers>, do tipo PostBackTrigger associado ao tal Button, conforme código abaixo:

    <%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="frmAcompanhamento.aspx.vb" Inherits="frmAcompanhamento" title=":: Ponte da US Simplício - Acompanhamento ::" %>
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1"%>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="true" EnableScriptLocalization="true" />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
    	<div>
    	</div>
    
    	<div id="divAnexos" runat="server">
                    <table style="width: 100%;">
                        <tr>
                            <td style="width: 50%;">Selecione o arquivo a ser anexado (<strong>.pdf, .jpg, .doc, .xls</strong>):</td>
                            <td style="width: 50%; text-align: left;">
                                <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                                    <Triggers>
                                        <asp:PostBackTrigger ControlID="btnAnexarArquivo" />
                                    </Triggers>
                                    <ContentTemplate>
                                        <asp:FileUpload ID="FileUpload1" runat="server" Font-Size="X-Small"/>&nbsp;&nbsp;
                                        <asp:Button ID="btnAnexarArquivo" runat="server" Text="Anexar" Font-Size="X-Small" CausesValidation="False" OnClick="btnAnexarArquivo_Click"/>
                                    </ContentTemplate>
                                </asp:UpdatePanel>
                            </td>
                        </tr>
                    </table>
    	</div>
            </ContentTemplate>
        </asp:UpdatePanel>
    </asp:Content>
    

    No codebehind, tenho o seguinte código para o evento Click do botão btnAnexarArquivo:

    Protected Sub btnAnexarArquivo_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAnexarArquivo.Click
        If (FileUpload1.HasFile) Then
            Dim sArqTemp As String = IO.Path.GetTempPath() + FileUpload1.FileName
            FileUpload1.SaveAs(sArqTemp)
            if IO.Path.GetExtension(FileUpload1.FileName).ToLower <> ".jpg" Then
               MostraMensagem("Atenção!\n\nFormato de arquivo não aceito.")
            End If
        End If
    End Sub
    

    Acontece que FileUpload1.HasFile retorna False!!! E o mais impressionante (ou irritante, sei lá!) é que tanto o Source quanto o Codebehind eu copiei de uma outra aplicação que eu mesmo fiz e funciona perfeitamente!

    O que está errado na codificação, seja no Codebehind ou no Source?

    Grato pela atenção de todos.

    Paulo Ricardo Ferreira

    quinta-feira, 15 de março de 2012 15:20

Todas as Respostas

  • Amigo, tire este controle do UpdatePanel 

    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)

    quinta-feira, 15 de março de 2012 16:02
  • Caro Olavo,

    A qual UpdatePanel você se refere? Ao mais interno ou mais externo?

    Acontece que já li em alguns posts que quando você está trabalhando com AJAX você tem que colocar o controle FileUpload dentro de um UpdatePanel condicional e configurar o <Triggers>, que foi como fiz e como tenho em outra aplicação que roda redondinha.

    Grato pela sua atenção.

    Paulo Ricardo Ferreira

    quinta-feira, 15 de março de 2012 16:06
  • Ola PRicardo,

    O asp.net não da suporte a uploadassincronos, o que você pode fazer para simular um upload assincrono é criar uma pagina só para o upload e dentro da pagina que você que fazer o upload assincrono chamar a pagina de upload por um iframe

    Abraços

    quinta-feira, 15 de março de 2012 17:17
  • Caro Oliveira,

    O pior é que tenho uma outra aplicação em que uso o mesmo Source e o mesmo Codebehind e tudo funciona direitinho.

    Essa tá meio misteriosa mesmo.

    Grato pela sua atenção.

    Paulo Ricardo Ferreira

    quinta-feira, 15 de março de 2012 17:59
  • com updatePanel somente vai funcionar se vc registrar o postback

    http://blog.encoresystems.net/articles/fileupload-in-an-ajax-updatepanel.aspx


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    quinta-feira, 15 de março de 2012 21:49
    Moderador
  • Caro Seilor,

    E como faço para registrar o postback? O artigo do cara tá meio confuso. Se você puder dar uma ajuda, ficarei imensamente grato.

    Paulo Ricardo Ferreira

    sexta-feira, 16 de março de 2012 11:22
  • amigão,

    no Link que o Seilor postou para sua pergunta mostra direitinho como registrar.

    boa sorte ai amigão!


    Herbert Agles
    Se a resposta contribuiu com a sua necessidade, não se esqueça de marcá-la, assim você beneficiará outros usuários. Sua dúvida também pode ser as de outros!

    sexta-feira, 16 de março de 2012 11:43
  • Prezados,

    Fuçando mais pelos googles da vida, acabei lendo uma dica que dizia para incluir enctype="multipart/form-data" na tag <form>.

    Feito isso, funcionou direitinho.

    Não estou com tempo para me deter em entender o porquê de ter funcionado. FAto é que está ok.

    Grato pela atenção de todos.

    Paulo Ricardo Ferreira

    sexta-feira, 16 de março de 2012 16:17