2010-02-11 17 views
14

Estoy tratando de utilizar el control FileUpload en ASP.NETCómo utilizar correctamente el control de ASP.NET FileUpload

Aquí está mi configuración de espacio de nombres actual:

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 

Y dentro de mi clase, I' m simplemente usando:

FileUpload fileUpload = new FileUpload(); 

Sin embargo, ninguno de los atributos que son normalmente parte de FileUpload parece estar disponible ... como .HasFile. Estoy tratando de hacer que el método de clic de botón en el código detrás, me he dado cuenta de que la mayor parte del uso de .HasFile está en el código en el frente, sin embargo, estaba enterado de que esto no debería importar.

¿Alguien sabe por qué?

Respuesta

48

Los controles ASP.NET deberían colocarse en el archivo aspx. Esa es la forma preferida de trabajar con ellos. Por lo tanto, agregue control FileUpload a su página. Asegúrese de que tiene todos los atributos requeridos, incluyendo ID y runat:

<asp:FileUpload ID="FileUpload1" runat="server" /> 

Instancia de FileUpload1 se creará automáticamente en el archivo generado automáticamente/modificada * .designer.cs que es una clase parcial para su página. Por lo general, no tiene que preocuparse por lo que contiene, solo suponga que cualquier control en una página aspx se instancia automáticamente.

Añadir un botón que va a hacer el segundo palo:

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 

A continuación, vaya a su archivo * .aspx.cs donde tiene su código y añadir clic de botón manipulador. En C# se ve así:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    if (this.FileUpload1.HasFile) 
    { 
    this.FileUpload1.SaveAs("c:\\" + this.FileUpload1.FileName); 
    } 
} 

Y eso es todo. Todos deberían funcionar como se espera.

+0

Creo que funcionará bien si definió la carga de archivos en la página aspx. Pero si el desarrollador desea crear la carga de archivos en el archivo aspx.cs, ¿cómo funciona? – Brian

+0

Tengo un problema igual esto emite lo que se discutió aquí. Definí fileUpload en codebehind. Así que, cuando presiono el botón, no funcionó nada. – Brian

+0

También definí un evento para el botón. Pero no funcionó cuando lo depure. Botón btn = new Buttton.btn.Click + = new EventHandler (btn_onclick); – Brian

1

En lugar de crear instancias de la FileUpload en el código detrás de archivo, simplemente declarar que en su archivo de anotación (archivo .aspx):

<asp:FileUpload ID="fileUpload" runat="server" /> 

Entonces usted será capaz de acceder a todas las propiedades del control, como HasFile.

1

Agregar un control FileUpload desde el código subyacente debería funcionar perfectamente, donde la propiedad HasFile debería estar disponible (por ejemplo, en su evento Click).

Si las propiedades no parecen estar disponibles (ya sea como un error del compilador o vía intellisense), probablemente esté haciendo referencia a una variable diferente de la que cree que es.

0

He notado que cuando la inteligencia no funciona para un objeto, generalmente hay un error en alguna parte de la clase en la que está trabajando.

La otra opción es que no creó una instancia del objeto FileUpload como una variable de instancia. asegúrese de que el código:

FileUpload fileUpload = new FileUpload(); 

no está dentro de una función en su código.

0

Mi solución en código detrás era:

System.Web.UI.WebControls.FileUpload fileUpload; 

No sé por qué, pero cuando se utiliza FileUpload sin System.Web.UI.WebControls se hace referencia a YourProject.FileUpload no System.Web.UI.WebControls.FileUpload.

Cuestiones relacionadas