Как правильно использовать элемент управления ASP.NET FileUpload

Я пытаюсь использовать элемент управления FileUpload в ASP.NET

Здесь моя текущая установка пространства имен:

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;

И в моем классе я просто использую:

FileUpload fileUpload = new FileUpload();

Однако ни один из атрибутов, которые обычно являются частью FileUpload, как представляется, недоступен... например,.HasFile. Я пытаюсь сделать метод нажатия кнопки в коде позади, я заметил, что большая часть использования .HasFile находится в коде впереди, однако я понимаю, что это не имеет значения.

Кто-нибудь знает, почему?

Ответ 1

Элементы управления ASP.NET скорее должны быть помещены в файл разметки aspx. Это предпочтительный способ работы с ними. Поэтому добавьте элемент управления FileUpload на свою страницу. Убедитесь, что у него есть все необходимые атрибуты, включая ID и runat:

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

Экземпляр FileUpload1 будет автоматически создан в автоматически сгенерированном/обновленном файле *.designer.cs, который является частичным классом для вашей страницы. Обычно вам не нужно заботиться о том, что в нем, просто предположите, что любой элемент управления на странице aspx автоматически создается.

Добавьте кнопку, которая будет делать сообщение назад:

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

Затем перейдите в свой файл *.aspx.cs, где у вас есть код и добавьте обработчик нажатия кнопки. В С# он выглядит следующим образом:

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

И что это. Все должно работать как ожидалось.

Ответ 2

Вместо создания экземпляра FileUpload в вашем коде за файлом просто объявите его в своем файле разметки (файл .aspx):

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

Затем вы сможете получить доступ ко всем свойствам элемента управления, например HasFile.

Ответ 3

Добавление элемента управления FileUpload из кода позади должно работать нормально, если свойство HasFile должно быть доступно (например, в событии Click).

Если свойства не отображаются (как ошибка компилятора или через intellisense), вы, вероятно, ссылаетесь на другую переменную, чем вы думаете.

Ответ 4

Я заметил, что когда intellisence не работает для объекта, обычно есть ошибка где-то в классе выше, над которым вы работаете.

Другой вариант заключается в том, что вы не создавали экземпляр объекта FileUpload в качестве переменной экземпляра. убедитесь, что код:

FileUpload fileUpload = new FileUpload();

не находится внутри функции в вашем коде.

Ответ 5

Мое решение в коде было:

System.Web.UI.WebControls.FileUpload fileUpload;

Я не знаю, почему, но когда вы используете FileUpload без System.Web.UI.WebControls, он ссылается на YourProject.FileUpload, а не на System.Web.UI.WebControls.FileUpload.