"3.95.131.208 - 3.95.131.208"

Response.Redirect к классу, который наследуется от UI.Page?

все, спасибо за ваше время.

Ну, это моя проблема (ну это вообще не пролемам), можно иметь класс, который наследует от 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." ко всем строкам, которые включают атрибут "ответ", поэтому теперь у меня есть только класс, который НЕ наследуется от "UI.Page" "и просто вызовите метод, который очищает буфер (настраиваемый метод), добавляет заголовки (чтобы принудительно загрузить, установить тип mime и имя файла) и очистить ответ сам по себе и получить эффект/использование, которое я хочу.

Чтобы получить доступ к сеансу, просто добавьте "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", просто класс, который "меняет" "текущий ответ" и "флеш" "контент, созданный на лету с кристальным отчетом, я думаю, что я совсем потерялся, но ваши ответы действительно помогают мне, особенно то, что говорит Tejs, что почти то же самое или то же, что я только что сделал, Спасибо.

UPDATE: Кстати, я просто понимаю, что класс ReportDocument имеет этот метод: ExportToHttpResponse, который позволяет нам очистить Crystal Report в браузере как PDF/XSL и т.д. Форсировать (или нет) загрузку файла.

+2
источник поделиться
4 ответа

Попробуйте сделать это вместо этого:

HttpContext.Current.Response.Redirect("...");
0
источник

Нет, поскольку нет текущей перегрузки, которая принимает экземпляр UI.Page. Однако вы можете вызвать метод Render на своей новой странице и написать непосредственно в поток ответов. ИНАЧЕ

  • Очистите буфер отклика.
  • Отобразить экземпляр вашей страницы в буфер ответа.
  • Вызовите Response.End(), чтобы очистить запрос и отправить его клиенту.

Если ваша новая страница вообще ничего не делает, вы можете добавить только дополнительный контент с ответом.

+2
источник

Вы можете использовать Server.Transfer и передать в экземпляр объекта страницы, который хотите переместить.

Вот документация: HttpServerUtility.Transfer

+1
источник
 HttpRequest Request = HttpContext.Current.Request;
 HttpResponse Response = HttpContext.Current.Response; 

И после этого вы можете перенаправить любую страницу.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос