2013-04-18 6 views
0

У меня есть страница ASP.NET/C#. Он в основном имеет текстовое поле для приема пользовательского ввода. Данные обрабатываются на сервере, и файл создается и сохраняется.Загрузить файл с сервера

Первоначально я передал файл клиенту, используя Response.TransmitFile(). Однако этот процесс отключает javascript на странице при загрузке файла.

Поэтому я разработал обработчик .ashx, чтобы помочь загрузить файл.

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

Что я хочу знать, как я могу подключить кнопку вызова обработчика?

Примечание: Мне нужно отправить параметр обработчику в виде строки запроса. Этот параметр доступен ТОЛЬКО в коде позади.

ответ

1

Если вы специально вам нужна кнопка, для запроса вы можете воспользоваться таким подходом:

ASPX:

<asp:Button ID="btnDownloadFile" runat="server" OnClick="btnDownloadFile_Click" /> 

Code-Behind:

protected void btnDownloadFile_Click(object sender, EventArgs e) 
{ 
    Response.Redirect(string.Format("/File.ashx?Id={0}", MyParameter); 
} 
+0

Я подумал об этом несколько минут назад! Но все равно спасибо! У меня создалось впечатление, что перенаправление на самом деле перенаправляет меня на пустую страницу или что-то в этом роде. –

+0

Мне было интересно, есть ли способ неявно вызвать обработчик после обратной связи страницы. Не могли бы вы пролить свет на это? –

+0

Неясно, не то, что я знаю, но, может быть, вы можете сказать мне, какие проблемы у вас еще есть? Во-первых, позвольте мне пояснить обработчик (и, возможно, вы уже это знаете) ... если вы посмотрите на System.Web.Page на MSDN, вы заметите, что он реализует IHttpHandler так же, как вы делаете с вашим пользовательским ASHX. По сути, страница - это просто обработчик с некоторыми дополнительными возможностями жизненного цикла. Можете помочь вам подумать о том, что вы можете сделать с ними с точки зрения кода. – Scott

1

Я знаю, что вы конкретно спрашиваете о кнопках, но вместо этого вы можете сделать вторую кнопку гиперссылкой, которая называется стилем, и установите NavigationUrl (или href) в путь .ashx. Я делаю некоторые предположения о коде вашего обработчика, но с его обработчиком вы можете напрямую вызвать его с помощью HTTP GET-запроса.

<asp:HyperLink ID="lnkDownloadFile" runat="server" NavigationUrl="/File.ashx?Id=1" Text="Download File" /> 

или

<a href="/File.ashx?Id=1">Download File</a> 

Если вам необходимо установить параметр в коде, вы можете установить его в одном из жизненного цикла событий, таких как Page_Load:

protected void Page_Load(object sender, EventArgs e) 
{ 
    lnkDownloadFile.NavigationUrl = string.Format("/File.ashx?Id={0}", MyParameterValue); 
} 
+0

Это еще один хороший способ, что я мог сделать это. Но предыдущий работает! В любом случае спасибо за помощь! –

+0

Без проблем! Рад, что у вас это работает – Scott

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