Jag har en usercontrol som innehåller en gridview (som innehåller några kolumner med data från Northwind + en kolumn med Update-knappar) som ligger i en UpdatePanel. Jag vet inte exakt vad felet innebär.. men jag har en teori.. Eftersom din UpdatePanel ligger i din UserControl som laddas dynamiskt, så vet inte WebFormen om att Asp.Net AJAX kommer att jacka in sig i Postback-hanteringen. När den gör det blir ASP.NET förvirrad och sätter stopp för det. Jag plockade ut UpdatePanel som låg i usercontrol:en och la in UpdatePanel Dynamiskt i eventet för knappen som lägger till usercontrol:en till sidan.Sys.WebForms.PageRequestManagerParserErrorException vid updatepanel
--Usercontrol-----
--UpdatePanel-----
--GridView-----------
Usercontrol:en läggs dynamiskt till en sida mha LoadControl eftersom jag inte vet hur många gånger den behövs på sidan... (I det är exemplet skulle det egentligen inte behövas)
När jag klickar på UpdateKnappen får jag felmeddelandet:
Sys.WebForms.PageRequestManagerParserErrorException: The message receivced from the server could not be parsed. Common causes for this error are when response is modifiedby calls to Response.Write(), response filters, HTTPModules, or server trace is enabled.
Details: Error parsing near '.
<!DOCTYPE html P'
Jag har inga Response.Write, response filters, inte trace = enabled, de enda HTTPModules inställningen är default för AJAX i web.config.
Har ni några ideer?
/Jesper
Här kommer koden för sidan...
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div><asp:Label ID="Label1" runat="server" Text="Lägg till en tabell..."></asp:Label>
<asp:Button ID="btnGRV" runat="server" Text="Button" />
<asp:PlaceHolder ID="PlaceHolder1" runat="server">
</asp:PlaceHolder>
</div>
<br />
</form>
</body>
</html>
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
btnGRV.Click += new EventHandler(btnAddGV_Click);
}
protected void btnAddGV_Click(object sender, EventArgs e)
{
//Lägg till gridviewen dynamiskt
Control wuc = LoadControl("WebUserControl.ascx");
//Bind gridview till Placeholder
PlaceHolder1.Controls.Add(wuc);
}
}
Koden för usercontrollen WebUserControl.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="PanelUpdateTimeLabel" runat="server" />
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="ProductID">
<Columns>
<asp:TemplateField ItemStyle-Width="20">
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<asp:Button ID="btnUpdate" runat="server" Text="Update" OnClick="btnUpdate_Click" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<Columns>
<asp:ButtonField CommandName="Update" Text="Update" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice], [UnitsInStock] FROM [Products] WHERE ([ProductID] = @ProductID)">
<SelectParameters>
<asp:QueryStringParameter Name="ProductID" QueryStringField="ProductID" Type="Int32" DefaultValue="1" />
</SelectParameters>
</asp:SqlDataSource>
</ContentTemplate>
</asp:UpdatePanel>
</div>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class WebUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
GridView1.RowCommand += new GridViewCommandEventHandler(GridView1_RowCommand);
}
void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Update")
{
//...
}
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
Button btnUpdate = (Button)sender;
GridViewRow gvr = (GridViewRow)btnUpdate.NamingContainer;
GridView gv = (GridView)gvr.NamingContainer;
//Ta fram värdet för den här raden
int intTestcaseID = (int)gv.DataKeys[gvr.RowIndex].Value;
//...
}
}Sv: Sys.WebForms.PageRequestManagerParserErrorException vid updatepanel
Jag gjorde nyligen en liknande sak med UserControl+AJAX. Jag tror inte jag fick samma fel men jag minns att det strulade. Tills jag placerade min UpdatePanel utanför min UserControl i stället för i den. Då var det inga problem längre. Jag föreslår att du testar det. Detta är egentligen en snyggare lösning också, för då kan din UserControl används både med och utan ASP.NET AJAX.Sv:Sys.WebForms.PageRequestManagerParserErrorException vid updatepanel
protected void btnAddGV_Click(object sender, EventArgs e)
{
//Lägg till gridviewen dynamiskt
Control wuc = LoadControl("WebUserControl.ascx");
//Skapa UpdatePanel
UpdatePanel up1 = new UpdatePanel();
up1.ID = "UpdatePanel1";
//Lägg till user kontrollen till UpdatePanel
up1.ContentTemplateContainer.Controls.Add(wuc);
//Bind gridview till Placeholder
PlaceHolder1.Controls.Add(up1);
}
Jag får nu inte längre felet men nu sätter jag break-point på knappen Uppdatera i usercontrol:en för att se att den går in i codebehind för tex
protected void btnUpdate_Click(object sender, EventArgs e)
{
MEN hit kommer man aldrig...
Vad kan detta bero på?
/Jesper