将参数传递给ASP.NET MVC应用程序中的远程SSRS报告

时间:2014-02-17 22:19:24

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

我有一个使用SSRS进行报告的ASP.NET MVC应用程序(使用Web表单和报表查看器)。我想动态地将两个参数传递给远程报告。我当前的实现将参数存储在session中,这在VS Development Server上运行正常,但是在Web表单中检索时,IIS上的变量为null。

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

    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”]为空? 或者是否有其他传递这些参数的方法?

2 个答案:

答案 0 :(得分: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);
        }
    }

答案 1 :(得分:0)

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

SetParameters需要IEnumerable<ReportParameter>(通常是List),而不是ReportParameter个对象。您的代码看起来应该更像这样:

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);
}