ReportViewer控件 - axd url

时间:2014-03-31 13:56:46

标签: c# webforms reportviewer

我在我的aspx中嵌入了Microsoft.Reporting.WebForms.ReportViewer控件。我的网站适用于mysite.com。 当尝试exmple导出报告时,有一个新的黑色窗口打开地址 mysite.com/Reserved.ReportViewerWebControl.axd... 工作正常。 但是..我想通过我的代理传递那个axd。我的意思是,我想强制导出使用url myproxy.mysite.com/Reserved.ReportViewerWebControl.axd...会将请求重定向回mysite.com/Reserved.ReportViewerWebControl.axd... 我注意到,该链接是在js内构建的(在该axd中包含了这个链接):

ExportReport: function(format)
{
    if (this.ExportUrlBase == null)
        return false;
    window.open(this.ExportUrlBase + encodeURIComponent(format), "_blank");
    return true;
}, 

axd的url存储在ExportUrlBase中。 如何将其更改为我的代理服务器网址?

2 个答案:

答案 0 :(得分:0)

可以在javascript中修改ExportUrlBase字段。报告本身存储在页面某处的占位符中,一旦发现您可以在其上创建调用_getInternalViewer()函数以获取对ExportUrlBase的访问权限。看看下面的代码:

function ModifyExportUrlBase()
{
    var rv = null;
    var r = null;
    try
    {
        // get the report viewer
        rv = this.$find("ctl31");
        r = rv._getInternalViewer();
    }
    catch(err)
    {
        console.log(err)
        setTimeout(ModifyExportFileName, 2000)
        return;
    }
    if(r == null)
    {
        setTimeout(ModifyExportFileName, 2000);
        return;
    }
    else{
        r.ExportUrlBase = "/yourproxypath" + r.ExportUrlBase
    }
}
ModifyExportUrlBase();

超时是必要的,因为报告是异步接收的,只有在报告完全加载后才能使用。

使用firebug上的inspect元素功能找到ctl31来检查实际的下载链接,将会有一个onclick方法,它利用页面上的报告ID。我看过的其他网站表明它可能会{" reportViewer"如果您使用的是动态CRM。最简单的方法是使用firebug或开发人员工具进行检查。

不幸的是,这不是对您的问题的完整修复,因为ExportUrlBase不存储整个URL,只是存储相对于域的URL,即ExportUrlBase =" Reserved.ReportViewerWebControl.axd ..."不是" www.yoursite.com/Reserved.ReportViewer ..."但是,一旦你可以更改它,你可以使用新配置在inetpub文件夹中创建一个目录,并通过该文件夹重定向链接以使用该配置。

来源:

http://reportsyouneed.com/ssrs-adding-date-to-exported-filenames/

https://www.dforge.net/2012/11/11/how-to-specify-a-filename-for-your-exported-reports-in-microsoft-dynamics-crm-2011/

答案 1 :(得分:0)

您可以尝试替换ExportReports()函数的行为:

    Microsoft.Reporting.WebFormsClient._InternalReportViewer.prototype.ExportReport =
    function(){ return "/proxypath" + this.ExportUrlBase } 

    window.open(
        $find('ReportViewerControl').exportReport() + encodeURIComponent('CSV'), 
        "_blank" 
    );