从ASP.NET MVC应用程序向远程SSRS报告传递参数
我有一个ASP.NET MVC应用程序,它使用SSR进行报告(使用web表单和报告查看器)。我想将两个参数动态地传递给远程报告。我当前的实现将参数存储在会话中,该会话在VS Development Server上运行良好,但在web表单中检索时,IIS上的变量为null 下面是调用视图的控制器方法从ASP.NET MVC应用程序向远程SSRS报告传递参数,asp.net,asp.net-mvc,reporting-services,Asp.net,Asp.net Mvc,Reporting Services,我有一个ASP.NET MVC应用程序,它使用SSR进行报告(使用web表单和报告查看器)。我想将两个参数动态地传递给远程报告。我当前的实现将参数存储在会话中,该会话在VS Development Server上运行良好,但在web表单中检索时,IIS上的变量为null 下面是调用视图的控制器方法 public ActionResult ShowReport(string id) { var reportParameters = new Dictionary<
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");
}
public ActionResult ShowReport(字符串id)
{
var reportParameters=新字典();
reportParameters.Add(“Param1”,id);
reportParameters.Add(“Param2”、“user1”);
会话[“reportParameters”]=reportParameters;
返回视图(“报告名称”);
}
下面是我如何尝试从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);
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
var reportParameters=(字典)会话[“reportParameters”];
foreach(reportParameters中的var项)
{
ReportParameter rp=新的ReportParameter(item.Key,item.Value);
ReportViewer1.ServerReport.SetParameters(rp);
}
}
有人知道会话[“reportParameters”]为什么为空吗?
或者是否有其他方法传递这些参数?问题在于
会话[“reportParameters”]
为空,还是没有将任何参数添加到报告中?因为您的代码目前不会向报表中添加参数,即使您正确地传递了这些参数,因此报表参数将为null
接受IEnumerable
(通常是列表
),而不是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);
}
受保护的无效页面加载(对象发送方,事件参数e)
{
var reportParameters=(字典)会话[“reportParameters”];
列表参数=新列表();
foreach(reportParameters中的var项)
{
添加(新的ReportParameter(item.Key,item.Value););
}
ReportViewer1.ServerReport.SetParameters(参数);
}
您也可以这样做:
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);
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!Page.IsPostBack)
{
尝试
{
var js=新的JavaScriptSerializer();
string reportPath=Request.QueryString[“LocalReport”];
字符串parametersTemp=Request.QueryString[“ParametersReport”];
列表参数=null;
if(parametrosTemp!=“”)
{
参数=JsonConvert.DeserializeObject
(parametrosTemp);
}
GenerateReport(报告路径、参数);
}
捕获(例外情况除外){
statusReport.Value=ex.Message;
}
}
}
私有void生成器报告(字符串报告路径,列表报告参数)
{
reportCurrent.ProcessingMode=ProcessingMode.Remote;
ServerReport ServerReport=reportCurrent.ServerReport;
serverReport.ReportServerUrl=
新Uri(AppSettings.URLReportServer);
serverReport.ReportPath=ReportPath;
serverReport.Refresh();
if(reportParameters!=null)
{
reportCurrent.ServerReport.SetParameters(reportParameters);
}
}