Предложите пользователю скачать .html страницу, созданную из .aspx

0

У меня есть страница по умолчанию с кнопкой, которая предлагает пользователю загрузить "подпись",

В основном это файл.html с определенным форматом (на основе информации о пользователе)

Так что в настоящее время у меня есть.aspx-страница, но я не уверен, как заставить пользователя загружать "визуализированную HTML-страницу из этого aspx",

На странице по умолчанию у меня есть следующее

   Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Response.ContentType = "text/html"
        Response.AppendHeader("Content-Disposition", "attachment; filename=My_Signature.html")
        Response.TransmitFile(Server.MapPath("~/Signature.aspx"))
        Response.End()

    End Sub

Можно ли отобразить страницу aspx в фоновом режиме, а затем попросить пользователя загрузить ее (приведенный html)?

Теги:
download

2 ответа

3
Лучший ответ

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

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Response.ContentType = "text/html"
        Response.AppendHeader("Content-Disposition", "attachment; filename=My_Signature.html")
        Dim contents As String = New System.Net.WebClient().DownloadString(Request.Url.GetLeftPart(UriPartial.Authority) + ResolveUrl("~/Signature.aspx"))    
        Response.Write(contents)
        Response.End()    
    End Sub

Разумеется, лучшим решением было бы поставить ваш код для генерации подписи в библиотеке классов (DLL), а затем вызвать его по мере необходимости.

  • 0
    Используя ваш код, он все равно будет генерировать некоторый aspx-код, такой как «» »<% @ Page Language =" VB "AutoEventWireup =" false "CodeFile =" Signature.aspx.vb "Inherits =" Signature "%> в заголовке и т. Д. , Я не думаю, что загруженная версия полностью отображается HTML
  • 0
    @SeRo Смотрите обновленный ответ.
Показать ещё 3 комментария
2

Вы можете переопределить метод Render() для aspx файла, чтобы он записывал html файл:

Protected Overrides Sub Render(writer As HtmlTextWriter)
    Dim sb As New StringBuilder()
    Dim sw As New StringWriter(sb)
    Dim hwriter As New HtmlTextWriter(sw)
    MyBase.Render(hwriter)
    Using outfile As New StreamWriter(Server.MapPath(".") + "\signature.html")
        outfile.Write(sb.ToString())
    End Using
    Response.ContentType = "text/html"
    Response.AppendHeader("Content-Disposition", "attachment;   filename=signature.html")
    Response.TransmitFile(Server.MapPath("~/signature.html"))
    Response.End()
End Sub

Все это будет в файле aspx, который будет преобразован в html (signature.aspx). Я бы сказал, если вы нажмете кнопку, сделайте переадресацию в новое окно, которое вызовет aspx и, следовательно, этот метод.

  • 0
    Я не могу заставить его работать, скажем, отсутствует файл signature.html
  • 0
    Не могли бы вы уточнить? По какой строке выдается ошибка / что за сообщение об ошибке? Возможно, вам придется расширить путь к файлу StreamWriter, включив в него полный каталог.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню