I have a problem that relates to the ajax upload. I am using styles on a div to show/hide the panel these objects are inside of. When I hit my upload tool, I pick the file I want and click upload. I get this error:
Sys.ArgumentException: Cannot deserialize. The data does not correspond to valid JSON.
I heard something about AJAX not playing nice if the control is initially hidden. I was under the impression that using a DIV control would eliminate this problem but it has not. Any ideas?
EditContent.aspx<%@ Page Title="" Language="C#" MasterPageFile="~/Admin/AdminPanel.Master" AutoEventWireup="true" CodeBehind="EditContent.aspx.cs" Inherits="BCCS.Admin.EditContent" %><%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit.HTMLEditor" TagPrefix="cc1" %><asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="content" runat="server"><div runat="server" id="SelectPane"><asp:Panel ID="pnlSelection" runat="server"><cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></cc1:ToolkitScriptManager><asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="IdNum" Width="500px" onselectedindexchanged="GridView1_SelectedIndexChanged"><AlternatingRowStyle BackColor="#CCCCCC" /><Columns> <asp:TemplateField ShowHeader="False"><HeaderStyle Width="100px" /><ItemTemplate ><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Select" Text="Select"></asp:LinkButton></ItemTemplate></asp:TemplateField><asp:BoundField DataField="IdNum" HeaderText="Record ID" InsertVisible="False" ReadOnly="True" SortExpression="IdNum" Visible="False" /><asp:BoundField DataField="CatName" HeaderText="Menu Item" SortExpression="CatName" /><asp:TemplateField HeaderText="Content" SortExpression="PageContent" Visible="False"><ItemTemplate><asp:Label ID="Label1" runat="server" Text='<%# Bind("CatName") %>'></asp:Label></ItemTemplate><EditItemTemplate><asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CatName") %>'></asp:TextBox></EditItemTemplate></asp:TemplateField></Columns><HeaderStyle BackColor="#33CCFF" /><RowStyle BackColor="White" /></asp:GridView></asp:Panel></div><div runat="server" id="editpane"><asp:Panel ID="pnlEditPage" runat="server"><asp:DetailsView ID="DetailsView1" runat="server" Height="37px" Width="582px" AutoGenerateRows="False" DataKeyNames="Id" DefaultMode="Edit" OnItemUpdating = "DetailsView_ItemUpdated" ><Fields><asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" SortExpression="Id" ReadOnly="True" /><asp:TemplateField HeaderText="Content" SortExpression="PageContent"><EditItemTemplate> <asp:TextBox ID="Editor1" runat="server" Text='<%# Bind("PageContent") %>' Height="200px" TextMode="MultiLine" Width="565px" /><cc1:HtmlEditorExtender ID="HtmlEditorExtender1" runat="server" TargetControlID="Editor1" OnImageUploadComplete="saveFile" EnableSanitization="false" DisplaySourceTab="true"><Toolbar><cc1:Undo /><cc1:Redo /><cc1:Bold /><cc1:Italic /><cc1:Underline /><cc1:StrikeThrough /><cc1:Subscript /><cc1:Superscript /><cc1:JustifyLeft /><cc1:JustifyCenter /><cc1:JustifyRight /><cc1:JustifyFull /><cc1:InsertOrderedList /><cc1:InsertUnorderedList /><cc1:CreateLink /><cc1:UnLink /><cc1:RemoveFormat /><cc1:SelectAll /><cc1:UnSelect /><cc1:Delete /><cc1:Cut /><cc1:Copy /><cc1:Paste /><cc1:BackgroundColorSelector /><cc1:ForeColorSelector /><cc1:FontNameSelector /><cc1:FontSizeSelector /><cc1:Indent /><cc1:Outdent /><cc1:InsertHorizontalRule /><cc1:HorizontalSeparator /><cc1:InsertImage /></Toolbar></cc1:HtmlEditorExtender></EditItemTemplate><InsertItemTemplate><asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("PageContent") %>'></asp:TextBox></InsertItemTemplate><ItemTemplate><asp:Label ID="Label1" runat="server" Text='<%# Bind("PageContent") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField ShowHeader="False"><EditItemTemplate><br /><br /><br /><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update" Text="Update"></asp:LinkButton> <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" onclick="LinkButton2_Click"></asp:LinkButton></EditItemTemplate><ItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit"></asp:LinkButton></ItemTemplate></asp:TemplateField></Fields></asp:DetailsView></asp:Panel></div></asp:Content>
EditContent.aspx.cs code: using System; using System.Data; using System.Data.SqlClient; using System.Web.Configuration; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace BCCS.Admin { public partial class EditContent : System.Web.UI.Page { protected global::System.Web.UI.WebControls.Panel pnlSelection; protected global::AjaxControlToolkit.ToolkitScriptManager ToolkitScriptManager1; protected global::System.Web.UI.WebControls.GridView GridView1; protected global::System.Web.UI.WebControls.Panel pnlEditPage; protected global::System.Web.UI.WebControls.DetailsView DetailsView1; protected global::AjaxControlToolkit.HtmlEditorExtender heeEditor1; protected global::System.Web.UI.HtmlControls.HtmlGenericControl SelectPane; protected global::System.Web.UI.HtmlControls.HtmlGenericControl editpane; protected global::System.Web.UI.HtmlControls.HtmlTextArea Editor1; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GridViewDataBind(); } } private void GridViewDataBind() { GridView1.DataSource = ""; SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["MyConn"].ConnectionString); SqlCommand cmd = new SqlCommand("SELECT Menu.CategoryName AS CatName, Menu.Description AS Descr, Pages.PageContent AS Content, Menu.Published, Menu.ID AS IdNum FROM Menu INNER JOIN Pages ON Menu.ID = Pages.MenuID"); conn.Open(); cmd.Connection = conn; SqlDataReader dr = cmd.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(dr); GridView1.DataSource = dt; GridView1.DataBind(); } private void DetailsViewDataBind(string SelectedID) { DetailsView1.DataSource = ""; SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["MyConn"].ConnectionString); SqlCommand cmd = new SqlCommand("SELECT * FROM [Pages] WHERE ([MenuId] = @Id)"); conn.Open(); cmd.Parameters.AddWithValue("Id", Convert.ToInt32(SelectedID.ToString())); cmd.Connection = conn; SqlDataReader dr = cmd.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(dr); DetailsView1.DataSource = dt; DetailsView1.DataBind(); } private void UpdateGridView() { // AjaxControlToolkit.HTMLEditor.Editor Editor = ((AjaxControlToolkit.HTMLEditor.Editor)DetailsView1.FindControl("Editor1")); TextBox Editor1 = ((TextBox)DetailsView1.FindControl("Editor1")); SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["MyConn"].ConnectionString); SqlCommand cmd = new SqlCommand("UPDATE [Pages] SET [PageContent] = @PageContent WHERE (Id = @Id)"); conn.Open(); cmd.Parameters.AddWithValue("Id", Convert.ToInt32(DetailsView1.SelectedValue.ToString())); cmd.Parameters.AddWithValue("PageContent", Editor1.Text.ToString()); cmd.Connection = conn; cmd.ExecuteNonQuery(); conn.Close(); } protected void DetailsView_ItemUpdated(object sender, DetailsViewUpdateEventArgs e) { UpdateGridView(); GridViewDataBind(); SelectPane.Attributes.Add("style", "display:normal;"); editpane.Attributes.Add("style", "display:none;"); } protected void LinkButton2_Click(object sender, EventArgs e) { SelectPane.Attributes.Add("style", "display:normal;"); editpane.Attributes.Add("style", "display:none;"); } protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { DetailsViewDataBind(GridView1.SelectedValue.ToString()); SelectPane.Attributes.Add("style", "display:none;"); editpane.Attributes.Add("style", "display:normal;"); } protected void saveFile(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e) { // Save your File heeEditor1.AjaxFileUpload.SaveAs(Server.MapPath("~/Assets/Images/" + e.FileName)); // Tells the HtmlEditorExtender where the file is otherwise it will render as: <img src="" /> e.PostedUrl = Server.MapPath("~/Assets/Images/" + e.FileName); } } }
Ajax Version: v4.0.30319