0

我在gridview中有一个按钮。我正在尝试使用此按钮打开一个新窗口,但我收到一条错误消息。

错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器接收到的消息。此错误的常见原因是通过调用 Response.Write()、响应过滤器、HttpModules 或启用了服务器跟踪来修改响应。详细信息:在 'window.open(' 附近解析错误。

ASP 代码

<asp:TemplateField HeaderText="" Visible="true">
    <ItemTemplate>
            <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Images/picture.jpg" 
            Height="20px" Width="20px" 
            CommandName="OpenGroupTrend"/>
    </ItemTemplate>
</asp:TemplateField>

VB代码

Protected Sub GV_SL_RowCommand(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs)
    If (e.CommandName = "OpenGroupTrend") Then
        Dim GroupTrendLink = "http://NewPage.aspx"
        Response.Write("<script>")
        Response.Write("window.open('" & GroupTrendLink & "','_blank')")
        Response.Write("</script>")
    End If
End Sub

如果我在 GridView 之外使用相同的代码,它可以正常工作。

我究竟做错了什么?

谢谢

4

2 回答 2

1

你不应该 Response.Write 那样写脚本。使用脚本管理器并从那里注册脚本。

http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerclientscriptblock.aspx

更好的是,完全放弃回发并使用 html 链接。

<a href="javascript: window.open('[url]','_blank')">
    <img src="Images/picture.jpg" />
<a> 
于 2013-10-28T22:42:43.097 回答
0

我已经设法用脚本管理器解决了。感谢nickles80的提示。如果对某人有帮助,请参阅下面的代码。我还添加了将值传输到新窗口的代码。

If (e.CommandName = "OpenGroupTrend") Then

 Dim G = e.CommandArgument.ToString
 Dim D = DateInt.Value
 Dim GroupTrendLink = "http://NewPage.aspx?D=" & D & "&G=" & G

 ScriptManager.RegisterStartupScript(Me, Me.GetType, "key", "open('" + GroupTrendLink + "');", True)

End If

在“Newpage.aspx”中,我使用以下代码来捕获值

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Dim DateTrans As Integer
        DateTrans = Request.QueryString("D")
        Label1.Text = DateTrans.ToString

        Dim GroupTrans As Integer
        GroupTrans = Request.QueryString("G")
        Label2.Text = GroupTrans.ToString
    End If
End Sub
于 2013-10-29T08:11:56.320 回答