【问题标题】:Prompt user to download .html page generated from .aspx提示用户下载从 .aspx 生成的 .html 页面
【发布时间】:2014-04-17 18:25:52
【问题描述】:

我有一个默认页面,其中包含一个提示用户下载“签名”的按钮

这基本上是一个具有特定格式的 .html 文件(基于用户信息)

所以目前我有一个 .aspx 页面,但我不确定如何让用户下载“从该 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")
        Response.TransmitFile(Server.MapPath("~/Signature.aspx"))
        Response.End()

    End Sub

是否可以在后台渲染 aspx 页面,然后以某种方式提示用户下载它(生成的 html)?

【问题讨论】:

    标签: html asp.net vb.net download


    【解决方案1】:

    你让它变得比现在更困难。只需像从任何其他网站一样下载文件内容,将其存储在字符串中,然后将其写入响应。

    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) 中,然后根据需要调用它。

    【讨论】:

    • 使用您的代码,它仍然会生成一些 aspx 代码,例如  在标题中等等。我不认为下载的版本是完全呈现的 html
    • 您必须弄清楚为什么会发生该错误。检查服务器上的 Windows 事件日志。
    • 我很想做石匠,但找不到这样的选择
    【解决方案2】:

    您可以覆盖 aspx 文件的 Render() 方法,以便写入一个 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 的新窗口,因此这个方法。

    【讨论】:

    • 我无法让它工作它说缺少 signature.html 文件
    • 您能详细说明一下吗?它在哪一行引发错误/错误消息是什么?您可能必须扩展 StreamWriter 文件路径以包含完整目录。
    • 试试这条线:Using outfile As New StreamWriter(Server.MapPath(".") + "\signature.html")
    • 如果您遵循此方法,您的服务器上会留下一个文件,如果多人同时访问该文件,您也可能会遇到问题。这是个坏主意。无需事先将其写入文件,只需将其存储在字符串中,然后将字符串写入响应即可。
    • 这是一个有效的观点,我承认我没有想到你的方法!
    猜你喜欢
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2011-03-22
    • 2021-07-05
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多