我在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外部使用相同的代码,它可以正常工作。
我做错了什么?
由于
答案 0 :(得分:1)
你不应该像这样响应。写脚本。使用scriptmanager并从那里注册脚本。
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>
答案 1 :(得分:0)
我已经设法用scriptmanager解决了这个问题。感谢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