所以这是一个很长的标题,这就是我正在做的事情:为了避免在 URL 中显示报告参数,我在代码隐藏中的按钮单击处理程序中执行此操作以显示报告:
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.Write("<html><head></head>");
System.Web.HttpContext.Current.Response.Write("<body onload=\"document.mainform.submit(); \">");
System.Web.HttpContext.Current.Response.Write(string.Format(CultureInfo.InvariantCulture, "<form name=\"mainform\" method=\"post\" action=\"{0}\">", ReportURL));
foreach (string key in Params.Keys)
{
System.Web.HttpContext.Current.Response.Write(string.Format(CultureInfo.InvariantCulture, "<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", key, Params[key]));
}
System.Web.HttpContext.Current.Response.Write("</form>");
System.Web.HttpContext.Current.Response.Write("</body></html>");
这很好用,但是当我从报告返回时,我被带到我刚刚生成的页面,该页面由于 onload 事件而立即提交表单。我可以快速回击两次以绕过它,但这并不理想。
在编写 html 之前,我尝试使用 ClientScript.RegisterStartupScript 使用 JavaScript 打开一个新窗口,但我不知道如何(或者是否有可能)为新窗口获取 HttpContext。