c# asp.net

c# - FileUpload no está funcionando dentro del panel de actualización



asp.net (11)

Añade esta línea en tu page_load

ScriptManager.GetCurrent(this).RegisterPostBackControl(this.Button);

Entonces, lo que estoy tratando de hacer es hacer que un usuario seleccione un archivo para cargar. Como solo aceptaré imágenes, probaré la extensión. También quiero limitar el tamaño del archivo a menos de 2mb, así que lo probaré (aún no lo he implementado en el código). Si el archivo que han seleccionado se aprueba, quiero que la etiqueta diga "Archivo aceptado", y almacenar la información de carga del archivo para un clic en el botón más adelante. Esto sucederá una vez que el usuario haya terminado de completar el resto del formulario. Finalmente, pondré un control UpdateProgress en la página mientras se comprueba si el archivo está permitido. Preferiría no volver a publicar para esto, así que si puedo hacerlo funcionar, sería genial. Por cierto, todo esto funcionará bien si saco la etiqueta del panel de actualización.

Lo que sucede cuando ejecuto esto, es que irá a la instrucción else de la primera vez y devolverá "Por favor seleccione un archivo". Lo que significa que FileUpload1.HasFile está devolviendo falso. ¿La única razón por la que puedo ver que esto está sucediendo es porque UpdatePanel no puede acceder a esa información desde el control de FileUpload?

Código detrás:

Label SubmitButtonLabel2= (Label)UpdatePanel1.FindControl("SubmitButtonLabel"); if (FileUpload1.HasFile) { string[] fileName = FileUpload1.FileName.Split(''.''); if ((fileName[fileName.Length - 1] == "jpg") || (fileName[fileName.Length - 1] == "gif") || (fileName[fileName.Length - 1] == "bmp") || (fileName[fileName.Length - 1] == "jpeg") || (fileName[fileName.Length - 1] == "png")) { SubmitButtonLabel2.Text = "File Accepted."; } else { SubmitButtonLabel2.Text = "File type not allowed. Please choose another."; } } else { SubmitButtonLabel.Text = "Please select a file."; }

Página:

<body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <div> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="SubmitButton" runat="server" Text="Submit File" OnClick=SubmitButton_Click /> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="always"> <ContentTemplate> <asp:Label ID="SubmitButtonLabel" runat="Server" /> </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="SubmitButton" /> </Triggers> </asp:UpdatePanel> </div> </form> </body>


El control predeterminado de FileUpload de asp.net nunca funcionará con UpdatePanel. Necesita un control especial AsyncFileUpload como se define en AjaxControl Toolkit. Esta

AsyncFileUpload

texto alternativo http://ruchitsurati.net/files/fileupload.png

<ajaxToolkit:AsyncFileUpload OnClientUploadError="uploadError" OnClientUploadComplete="uploadComplete" runat="server" ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern" UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" />


Haga el botón para cargar el archivo como el desencadenante del panel Cargar Algo como esto,

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:Panel ID="pnlUploadImage" runat="server"> <asp:FileUpload ID="fuldImage" runat="server"></asp:FileUpload> <asp:LinkButton ID="lnkbUpload" runat="server" onclick="lnkbUpload_Click">Add</asp:LinkButton> </asp:Panel> </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="lnkbUpload"/></Triggers> </asp:UpdatePanel>


Lo puse en funcionamiento después de usar dos de las soluciones publicadas aquí.

Tuve que agregar ambos

Page.Form.Attributes.Add("enctype", "multipart/form-data");

en Page_Load, así como

<Triggers> <asp:PostBackTrigger ControlID="btnUpload" /> </Triggers>

en el marcado para el panel de actualización.



No te olvides de cambiar el tipo de formulario, para permitir la carga de archivos (tipo de letra o algo así, no estoy frente a Visual Studio, por lo que no puedo ser tan preciso).

Yo tuve el mismo problema.


Si usa el control FileUpload en el panel Actualizar, debe configurar PostbackTrigger para el botón en el que escribe el código para guardar el archivo cargado.

Ahora siguiendo el código tengo el botón btnSave para guardar el archivo en la carpeta de carga. Así que configuro el postbacktrigger para ello.

<Triggers> <asp:PostBackTrigger ControlID="btnSave" /> </Triggers>

Espero que esto te ayudará.


Supongo que el HasFile solo se llenará cuando la publicación ya esté terminada, no antes de eso.

Es posible que desee comprobar si FileUpload1.FileName ya está lleno antes de que se complete la publicación, pero dudo un poco.




<Triggers> <asp:PostBackTrigger ControlID="YourControlID" /> </Triggers>

Agregue el desencadenante para UpdatePanel y proporcione el ControlID . En caso de que esté utilizando TabContainer , use la ID del contenedor de pestañas.