【问题标题】:Passing parameters to remote SSRS report from ASP.NET MVC application从 ASP.NET MVC 应用程序向远程 SSRS 报告传递参数
【发布时间】:2014-02-17 22:19:23
【问题描述】:

我有一个使用 SSRS 进行报告的 ASP.NET MVC 应用程序(使用 Web 表单和报告查看器)。我想将两个参数动态传递给远程报告。我当前的实现将参数存储在会话中,这在 VS 开发服务器上运行良好,但在 IIS 上,在 Web 表单中检索时变量为空。

这里是调用视图的控制器方法

    public ActionResult ShowReport(string id)
    {
        var reportParameters = new Dictionary<string, string>();
        reportParameters.Add("Param1", id);
        reportParameters.Add("Param2", "user1");
        Session["reportParameters"] = reportParameters;

        return View("ReportName");
    }

这是我尝试从网络表单中检索参数的方式

    protected void Page_Load(object sender, EventArgs e)
    {
        var reportParameters = (Dictionary<string, string>)Session["reportParameters"];

        foreach (var item in reportParameters)
        {
            ReportParameter rp = new ReportParameter(item.Key, item.Value);
            ReportViewer1.ServerReport.SetParameters(rp);
        }
    }

有人知道为什么 Session["reportParameters"] 为空吗? 还是有其他方式传递这些参数?

【问题讨论】:

    标签: asp.net asp.net-mvc reporting-services


    【解决方案1】:

    你也可以这样做:

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {
    
                    var js = new JavaScriptSerializer();
                    string reportPath= Request.QueryString["LocalReport"];
                    string parametersTemp = Request.QueryString["ParametersReport"];
                    List<ReportParameter> parameters = null;
    
                    if (parametrosTemp != "")
                    {
                        parameters = JsonConvert.DeserializeObject
                                                <List<ReportParameter>>(parametrosTemp);
                    }
    
                    GenerateReport(reportPath, parameters );
                }
                catch (Exception ex) {
                    statusReport.Value = ex.Message;
                }
    
            }
         }
    
    
    
        private void GenerateReport(string reportPath, List<ReportParameter> reportParameters)
        {
    
            reportCurrent.ProcessingMode = ProcessingMode.Remote;
            ServerReport serverReport = reportCurrent.ServerReport;
    
            serverReport.ReportServerUrl =
                new Uri(AppSettings.URLReportServer);
                serverReport.ReportPath = reportPath;
            serverReport.Refresh();
    
            if (reportParameters != null)
            {
              reportCurrent.ServerReport.SetParameters(reportParameters);
            }
        }
    

    【讨论】:

      【解决方案2】:

      问题是Session["reportParameters"] 为空还是您的报告中没有添加任何参数?因为您的代码就目前而言,即使您正确传递参数也不会将参数添加到您的报告中,因此报告参数将为空。

      SetParameters 采用 IEnumerable&lt;ReportParameter&gt;(通常是 List),而不是 ReportParameterobject。您的代码应该看起来更像这样:

      protected void Page_Load(object sender, EventArgs e)
      {
          var reportParameters = (Dictionary<string, string>)Session["reportParameters"];
          List<ReportParameter> parameters = new List<ReportParameter>();
      
          foreach (var item in reportParameters)
          {
              parameters.Add(new ReportParameter(item.Key, item.Value););
          } 
          ReportViewer1.ServerReport.SetParameters(parameters);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多