2015-03-05 5 views
0

У меня проблема звучит странно для меня! Я собираюсь загрузить файл с помощью asp.net C# из пользовательского элемента управления. Вот структура моих веб-форм:Загрузить файл из пользовательского элемента управления, завернутого в панель обновления главной страницы

  1. Существует Site.Master файл, в котором держатель место содержания обернут панель обновления
  2. Eсть управления пользователя с именем Library.ascx, которые отображают списки книг чтобы пользователи могли загружать каждый из них, который им нравится. Обратите внимание, что книги отображаются с помощью веб-элемента управления ListView.
  3. выше пользовательский элемент управления используется в различных страниц на одном веб-сайте (представьте себе веб-сайт школы, который включает в себя различные уровни и каждый из которых имеет страницу библиотеки)

код для загрузки файла является как следующее:

protected void listViewBooks_ItemCommand(object sender, ListViewCommandEventArgs e) 
    { 
     if (e.CommandName != "Download") return; 

     var books = _lib.GetBookInfo(Convert.ToInt32(e.CommandArgument)); 
     var filePath = string.Empty; 

     foreach (var s in books) 
     { 
      filePath = s.FilePath; 
     } 

     var fileName = filePath.Substring(filePath.LastIndexOf(@"/", StringComparison.Ordinal) + 1); 
     filePath = Server.MapPath("~/PDF/") + fileName; 

     var file = new FileInfo(filePath); 

     if (!file.Exists) return; 

     Response.ClearContent(); 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + file.Name); 
     Response.AddHeader("Content-length", file.Length.ToString(CultureInfo.InvariantCulture)); 
     Response.ContentType = "application/octet-stream"; 
     Response.TransmitFile(file.FullName); 
     Response.End(); 
    } 

на самом деле, он идет до линии, прежде чем Response.End(), и я не знаю, почему он никогда не ловит последнюю скобку события, т.е. «}» и от точка зрения пользователей ничего не происходит! Я искал веб-страницы и подобные вопросы часами, но не смог найти решение! Например, this linke или this one и некоторые другие Любая помощь очень ценится!

+0

Не лучше ли [универсальный веб-обработчик] (http://www.dotnetperls.com/ashx)? – BCdotWEB

+0

На самом деле, у меня нет опыта работы с общим веб-обработчиком, но спасибо за ссылку, возможно, это помогает мне. – Ali

ответ

0

Он никогда не достигнет последнего кронштейна, потому что вы используете Response.End():

Метод End вызывает веб-сервер, чтобы прекратить обработку сценария и возвращает текущий результат. Оставшееся содержимое файла не обрабатывается.

Вы не можете скачать файл из UpdatePanel. Вместо этого вы должны вызвать полный postback.

+0

На самом деле я тоже обработал триггер, хотя не был включен в код, который я отправил, но ничего не изменилось. И спасибо, что вы сказали записку о Response.End() Я этого не знал. – Ali

+0

Вы были правы в связи с вопросом назад, как я уже упоминал по своему собственному ответу, он был неуместным, но любой, как я предпочитаю отмечать вас как ответ – Ali

0

Наконец-то я пришел к вопросу, который я поднял вчера. Поскольку поток кода в указанном пользовательском элементе управления мне пришлось написать код триггера панели обновления внутри события, связанного с данным списком, и он просто решил :) спасибо, что ребята помогли мне в этом.

Смежные вопросы