gpt4 book ai didi

asp.net - Response.Redirect 到继承自 UI.Page 的类?

转载 作者:行者123 更新时间:2023-12-02 11:14:13 25 4
gpt4 key购买 nike

大家,谢谢您的宝贵时间。

这是我的问题(好吧,这根本不是问题),是否可以有一个继承自 ui.page 的类,然后实例化该类的对象并重定向到它?

类似这样的事情:

Public sub myMethod() 
Dim myPage as new myClassThatInheritsFromUIPage()
Response.redirect(myPage) 'Here is one of my "no-idea" line
end sub

我在我的 webForm 中执行此操作(并且我想在继承自 ui.page 的类中执行此操作):

Response.BufferOutput = True  
Response.ClearContent()
Response.ClearHeaders()
ostream=crReportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat)
Response.AppendHeader("Cache-Control", "force-download")
Response.AppendHeader("Content-disposition","attachment;filename=ReportAsPDF.pdf")
Response.ContentType = "application/pdf"
Response.BinaryWrite(ostream.ToArray())
Response.Flush()
HttpContext.Current.ApplicationInstance.CompleteRequest()

我想要做的事情在普通的 WebForm 中是完全可能的,但是我的 webForm 根本不渲染任何内容(至少作为 (x)html 如此,那是因为我想知道我要问的是否是可能实现。

谢谢大家。

最后,我只是将 "HttpContext.Current." 添加到包含“response”属性的所有行中,所以现在我只有一个不继承自“UI.Page”的类"并且只需调用清除缓冲区的方法(自定义方法),添加 header (强制下载,设置mime类型和文件名)并自行刷新响应并获得我想要的效果/使用。

为了访问 session 变量,只需添加“HttpContext.Current”。它有效,我不知道有多安全,也不知道是否是一个好方法,但似乎效果很好。

所以代码现在看起来像这样:

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports CrystalDecisions.ReportSource

Namespace foo
Public Class requestReport


'just to instance the object'
Public Sub New()


End Sub


Public Sub downloadReport()
'do all the stuff to connect and load the report'
HttpContext.Current.Response.BufferOutput = True
HttpContext.Current.Response.ClearContent()
HttpContext.Current.Response.ClearHeaders()
ostream=crReportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat)
HttpContext.Current.Response.AppendHeader("Cache-Control", "force-download")
HttpContext.Current.Response.AppendHeader("Content-disposition","attachment;filename=ReportAsPDF.pdf")
HttpContext.Current.Response.ContentType = "application/pdf"
HttpContext.Current.Response.BinaryWrite(ostream.ToArray())
HttpContext.Current.Response.Flush()
HttpContext.Current.ApplicationInstance.CompleteRequest()
End Sub
End Class
End Namespace

例如,通过命令执行以下操作:

dim myReport as new foo.requestReport()
myReport.downloadReport()

当然,如果需要,现在您可以添加更多属性或方法。

所以现在我什至不使用Response.redirect()或继承“UI.Page”,只是一个“更改”“当前响应”和“刷新”的类“使用 Crystal 报告即时创建的内容,我想我完全迷失了,但你的回答确实对我有帮助,特别是 Tejs 所说的,与我刚刚所做的几乎相同或相同的内容。谢谢。

更新:顺便说一句,我刚刚意识到 ReportDocument 类有这个方法:ExportToHttpResponse,它让我们将 Crystal 报表以 PDF/XSL 等方式刷新到浏览器,强制(或不)下载文件。

最佳答案

否,因为当前没有接受 UI.Page 实例的重载。但是,您可以在新页面上调用 Render 方法并直接写入响应流。又名

  1. 清除响应缓冲区。
  2. 将页面实例渲染到响应缓冲区。
  3. 调用Response.End()来刷新请求并将其发送到客户端。

如果您的新页面实际上没有执行任何操作,您还可以不随响应发回任何内容。

关于asp.net - Response.Redirect 到继承自 UI.Page 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com