是否可以在弹出窗口中使用报表查看器 window?

Is it possible to have report viewer in a popup window?

我有一个 ASP.NET 4.0 网络应用程序。

应用程序有两个新页面:

截至目前,我可以在 gridview 中单击 ID 并完成重定向以转到报告。但我想做的是在 openInvoice.aspx 内的弹出窗口 window 中打开 reportviewer.aspx,这样就不必进行重定向并强制用户按下浏览器中的后退按钮.

这可以吗?如果是这样,如何?

应该很简单,因为您有一个包含报告查看器的专用页面

我使用 jQuery 和 ColorBox。您只需要设置适当的选项。像这样:

function ViewPopUpReport(id) {
  var options = {
        iframe: true, 
        href  : null
        // there are many more parameters available, this is just the short list to keep it simple
      }
    options.href = 'reportviewer.aspx?id=' + id;

    $.colorbox(options);
}

这是关键。 Select处理报告会导致回发。那必须停止。最简单的方法是禁用 Gridview 上的行选择并替换你自己的 onclick(注意:我在 VB 工作,但你应该能够很容易地转换它):

Private Sub YourGridView_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles YourGridView.RowDataBound
  Dim gv As GridView = sender
  If e.Row.RowType = DataControlRowType.DataRow Then
    Dim pkey As String = gv.DataKeys(e.Row.RowIndex).Values("your_report_id")
    If pkey IsNot Nothing Then
      e.Row.Attributes.Add("onclick", String.Format("ViewPopupReport('{0}');", Server.UrlEncode(pkey)))
    End If
  End If
End Sub

如果禁用行选择不是一个选项,那么您可以通过添加包含基本 html 按钮或具有 id 和 [=13 的 img 图标的未绑定模板字段来执行类似的操作=] 属性设置,以便您可以在 RowDataBound 事件中找到控件,然后只需应用相同的 onclick 逻辑。使用此方法的主要目的是确保您使用的控件不会触发回发。

(我不记得将 gridview 保留为可选状态是否仍会触发 Select 回发,如果是这样,我认为这只是从视图弹出函数返回 false 或调用 preventDefault 或取消气泡 - 已经有一段时间了:))

关于安全的另一件事。将 Pkeys 作为参数发送是一种不好的做法,至少,如果必须以这种方式传递参数,则应该对其进行加密。更好的选择是会话变量。我会留给你。祝你好运。