aspx页面上的引用,ashx页面导致报表查看器声明出错



我使用VB.NET构建了一个Web Matrix网站。我添加了一个名为reports.aspx的文件来处理一些报告。具体来说,它使用Neodynamic Web Client Print SDK将报告从SSRS保存为PDF,然后重定向到一个名为reports.ashx的处理程序文件,该文件实际处理打印。

reports.aspx 中的代码

<%@ Page Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="Microsoft.Reporting.WebForms" %>
<%-- Register the WebClientPrint script code --%>
 <%=Neodynamic.SDK.Web.WebClientPrint.CreateScript(MyUtils.GetWebsiteRoot() + "reports.ashx")%>
<!DOCTYPE html>
<script language="VB" runat="server">
Private Sub Page_Load(sender As Object, e As EventArgs)
    Dim reportname As String
    Dim paramBlock As New ReportParameter()
    Dim paramID As New ReportParameter()
    reportname = Request("reportname")
    Dim v As New ReportViewer
    v.ProcessingMode = ProcessingMode.Remote
    Dim serverreport As New ServerReport
    serverreport = v.ServerReport
    serverreport.ReportServerUrl = New Uri("http://websql1.core.com/Reports")
    serverreport.ReportPath = "/Reports/Aramid/Sheeter/" & reportname
    Select Case reportname
    Case Is = "NomexBlockCard" Or "NomexBlockLabel" Or "NomexInternalLabel"
        paramBlock.Name = "paramBlock"
        paramBlock.Values.Add(Request("paramBlock"))
        Dim parameters() As ReportParameter = {paramBlock}
    Case Is = "NomexRoutingData"
        paramID.Name = "paramID"
        paramID.Values.Add(Convert.ToInt32(Request("paramID")))
        Dim parameters() As ReportParameter = {paramID}
    End Select
    serverreport.SetParameters(parameters)
    Save(serverreport, "~/Files/")
    'now print
    Response.Redirect("reports.ashx?fileName=" & reportname)
End Sub
Public Sub Save(ByVal sr As ServerReport, ByVal savePath As String)
    Dim Bytes() As Byte = sr.Render("PDF", "", Nothing, Nothing, Nothing, Nothing, Nothing)
    Using Stream As New FileStream(savePath, FileMode.Create)
        Stream.Write(Bytes, 0, Bytes.Length)
    End Using
End Sub

</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
</body>
</html>

来自reports.ashx 的代码

<%@ WebHandler Language="VB" Class="reports" %>
Imports System
Imports System.Web
Imports Neodynamic.SDK.Web
Public Class reports : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    Dim useDefaultPrinter As Boolean = True '(context.Request("useDefaultPrinter") = "checked")
    Dim printerName As String = context.Server.UrlDecode(context.Request("printerName"))
    Dim fileName As String = context.Server.UrlDecode(context.Request("fileName"))
    Dim filePath As String = "~/Files/"
    If (filePath <> Nothing) Then
        Dim file As New PrintFile(context.Server.MapPath(filePath), fileName)
        Dim cpj As New ClientPrintJob()
        cpj.PrintFile = file
        If (useDefaultPrinter OrElse printerName = "null") Then
            cpj.ClientPrinter = New DefaultPrinter()
        Else
            cpj.ClientPrinter = New InstalledPrinter(printerName)
        End If
        cpj.SendToClient(context.Response)
    End If
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
    Get
        Return False
    End Get
End Property
End Class

当我打开Visual Studio进行构建和发布时,会出现以下错误。

"从模块system.web的程序集中导入类型system.web.httpcontextbase失败"

当我查看reports.aspx中的代码时,行下有一个错误

Dim v as New ReportViewer

纠错选项表示"需要引用System.Web.Extensions版本=3.5.0.0,….包含实现的接口System.Web.UI.IScriptControl。将一个添加到您的项目"

我引用的是System.Web、System.Web.Extensions和System.Web.Abstractions.

瞄准.NET 4

请帮助我理解这个问题或需要查看的内容。

谢谢!

这是一件非常简单的事情。当我在Webmatrix中开始这个项目时,随着它的发展,我将它转移到了Visual Studio解决方案中。当我把它移到一个解决方案时,它把目标框架改为2.0而不是4。

奇怪。将目标改回4,更新了参考资料,很好!

最新更新