我有一个使用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”]为空? 或者是否有其他传递这些参数的方法?
答案 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);
}