Загрузка файлов на разные страницы - PullRequest
1 голос
/ 27 апреля 2009

Я застрял в загрузке файлов на разных страницах. На одной странице я открываю всплывающее окно, где я прошу пользователя просмотреть и выбрать файлы, а при закрытии всплывающего окна закрывается, а затем я хочу загрузить файлы с главной страницы, не из всплывающего окна. Как я могу это сделать? Я использую следующий код для получения загруженных файлов:

HttpFileCollection uploads = HttpContext.Current.Request.Files;

Как я могу получить доступ к этому значению с главной страницы, я использую HttpFilecollection во всплывающем окне.

Ответы [ 8 ]

2 голосов
/ 27 апреля 2009

Если вы подумаете об этом, на самом деле ваш вопрос не в том, как загрузить файлы с другой страницы. Это "Как передать значения с одной страницы на другую в ASP.NET?"

Хорошей новостью является то, что в Интернете есть миллион статей, объясняющих, как это сделать:

а. Постбэк кросс-страницы

б. Как передавать значения между страницами ASP.NET (MSDN)

с. Еще одна статья Стива С. Орра о передаче значений .

Значение, которое вам нужно передать - это HttpFileCollection от всплывающей страницы до родительской страницы. Затем вы можете перебирать каждый HttpPostedFile в коллекции и вызывать Save в соответствии с вашей логикой.

1 голос
/ 30 апреля 2009

Для этого с помощью JavaScript вы можете использовать метод document.createElement .

Для этого с помощью ASP.NET используйте класс HtmlTableRow и динамически добавляйте строки в таблицу.

Я рекомендую JavaScript подход.

1 голос
/ 29 апреля 2009

В JavaScript окно имеет свойство «opener», которое ссылается на родительские окна.

Таким образом, вы можете вызвать window.opener , чтобы получить доступ к родительскому окну из всплывающего окна и сделать все, что вы хотите.

0 голосов
/ 28 апреля 2009

HI, Вы можете передать имена файлов в родительское окно, используя

opener.SomeFunction

и передать имена файлов в виде массива в качестве аргумента функции.

Надеюсь, это поможет

0 голосов
/ 27 апреля 2009

Исходя из моего опыта, мне очень нравится управление загрузкой telerik, оно предлагает много вещей, таких как проверка, размер файла, допустимые расширения и т. Д., Но если вы хотите добиться прогресса в реальном времени, вам лучше использовать серебряную подсветку или управление загрузкой на основе флэш-памяти Telerik предлагает это.

вот несколько ссылок на достижение этого с помощью flash + ASP.Net

надеюсь, это поможет.

0 голосов
/ 27 апреля 2009

Проблема в том, что вы не можете установить значение элемента input type = "file" по соображениям безопасности. Вы не хотите, чтобы злые сайты пытались загрузить ваш C: \ whatfiletheywant.dat

Таким образом, вы должны выполнить загрузку во всплывающем окне во временную папку загрузки и отправить имена файлов, загруженных пользователем, в мастер-форму через javascript (window.opener)

Я делал это много раз.

Что-то похожее на то, что я делаю, если мне нужно загрузить что-то во всплывающем окне.

List<string> filesUploaded = new List<string>();
foreach (HttpPostedFile file in HttpContext.Current.Request.Files)
{
    if (file.ContentLength <= 0)
        continue;

    string filename = String.Format("{0}.jpg",Regex.Replace(Guid.NewGuid().ToString(), "[^A-Za-z0-9]*", String.Empty));
    file.SaveAs(Path.Combine(Server.MapPath("/upload/temp/"), filename));
    filesUploaded.Add(filename);
}
Response.Write(String.Format("<{0}>window.opener.FilesUploaded([{1}]);</{0}>","script", String.Join(",",filesUploaded.ToArray()).TrimEnd(new char[]{','})));

* note ... asp не любит теги script в вашем коде c #, поэтому ключевое слово script находится в String.Format

0 голосов
/ 27 апреля 2009

Это невозможно.

Загрузка должна выполняться на странице, где находится элемент управления загрузкой. Вы не можете перенести информацию в другое окно и разрешить загрузку.

Когда отправка отправляется на сервер, вы должны немедленно позаботиться об этом. Загруженные файлы существуют только в коллекции файлов этого запроса, если вы не позаботились о данных файла при обработке этого запроса, он исчез.

Итак, если у вас есть элемент управления загрузкой во всплывающем окне, всплывающее окно должно выполнить загрузку. Вы должны позаботиться о загруженных файлах, когда всплывающая страница будет опубликована, но вы, конечно, можете поместить некоторую информацию о загруженных файлах в ответ, которую всплывающее окно может отправить на главную страницу, когда всплывающее окно закрывается.

0 голосов
/ 27 апреля 2009

Вы можете попробовать использовать межстраничные обратные передачи , что является новой функцией в ASP.NET 2.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...