2014-02-17 62 views
0

我有一個使用SSRS進行報告的ASP.NET MVC應用程序(使用Web表單和報告查看器)。我想將兩個參數動態地傳遞給遠程報告。我當前的實現將參數存儲在會話中,在VS開發服務器上可以正常工作,但是在Web表單中檢索時,該變量在IIS上爲空。將參數傳遞給ASP.NET MVC應用程序的遠程SSRS報告

這裏是調用視圖

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

控制方法和這裏就是我試圖找回從Web表單參數

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

誰知道爲什麼會話[「reportParameters」]一片空白? 還是有其他的方式來傳遞這些參數?

回答

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); 
} 
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); 
     } 
    } 
相關問題