我有一个ASP.NET 4.0 Web应用程序。
该应用程序有两个新页面:
截至目前,我可以在gridview中点击ID,然后进行重定向以转到报告。但我想做的是在openInvoice.aspx内的弹出窗口中打开reportviewer.aspx,不必进行重定向,并强制用户按下浏览器中的后退按钮。
这可能吗?如果是这样,怎么样?
答案 0 :(得分:0)
应该很简单,因为您有一个包含reportviewer的专用页面
我使用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);
}
这是踢球者。选择报告会导致回发。那必须停止。最简单的方法是在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
和runat=server
属性的img图标来做类似的事情。可以在RowDataBound事件中找到控件,然后只应用相同的onclick逻辑。此方法的主要功能是确保使用不触发回发的控件。
(我不记得是否将gridview作为可选择仍然会触发Select回发,如果是这样的话,我认为这只是从视图弹出功能返回false或者调用preventDefault或取消冒泡的问题 - 这是一个而:))
安全性还有一件事。将Pkeys作为参数发送是不好的做法,至少,如果你必须以这种方式传递参数,它应该被加密。更好的选择是会话变量。我会留给你的。祝你好运。