У меня есть страница по умолчанию с кнопкой, которая предлагает пользователю загрузить "подпись",
В основном это файл.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)?
Вы делаете это сложнее, чем есть. Просто загрузите содержимое файла, как и с любого другого сайта, сохраните его в строке, напишите его в ответ.
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), а затем вызвать его по мере необходимости.
Вы можете переопределить метод 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 и, следовательно, этот метод.