|
Rank: Advanced Member Groups: Member
Joined: 5/31/2007 Posts: 36
|
i have a tree inside a callback and a button that triggers the callback, when setting the globalization to "tr-TR" and populating the tree on demand and trigerring the callback it throws an error - "The state information is invalid for this page and might be corrupted."
please look at this code: <%@ page language="C#" autoeventwireup="true" codefile="Default.aspx.cs" inherits="_Default" %>
<%@ register assembly="EO.Web" namespace="EO.Web" tagprefix="eo" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <eo:callbackpanel id="CallbackPanel1" runat="server" triggers="{ControlID:Button1;Parameter:}"> <asp:button id="Button1" runat="server" text="Button" /> <eo:treeview id="TreeView1" runat="server" height="250px" width="200px" controlskinid="None" onitempopulate="TreeView1_ItemPopulate"> <looknodes> <eo:treenode collapsedimageurl="00030301" disabledstyle-csstext="background-color:transparent;border-bottom-style:none;border-left-style:none;border-right-style:none;border-top-style:none;color:Gray;padding-bottom:1px;padding-left:1px;padding-right:1px;padding-top:1px;" expandedimageurl="00030302" imageurl="00030301" itemid="_Default" normalstyle-csstext="PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; COLOR: black; BORDER-TOP-STYLE: none; PADDING-TOP: 1px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: transparent; BORDER-BOTTOM-STYLE: none" selectedstyle-csstext="background-color:#316ac5;border-bottom-color:#999999;border-bottom-style:solid;border-bottom-width:1px;border-left-color:#999999;border-left-style:solid;border-left-width:1px;border-right-color:#999999;border-right-style:solid;border-right-width:1px;border-top-color:#999999;border-top-style:solid;border-top-width:1px;color:White;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px;"> </eo:treenode> </looknodes> <topgroup style-csstext="border-bottom-color:#999999;border-bottom-style:solid;border-bottom-width:1px;border-left-color:#999999;border-left-style:solid;border-left-width:1px;border-right-color:#999999;border-right-style:solid;border-right-width:1px;border-top-color:#999999;border-top-style:solid;border-top-width:1px;color:black;cursor:hand;font-family:Tahoma;font-size:8pt;padding-bottom:2px;padding-left:2px;padding-right:2px;padding-top:2px;"> <nodes> <eo:treenode imageurl="00030303" populateondemand="True" text="Press Me"> </eo:treenode> </nodes> </topgroup> </eo:treeview> </eo:callbackpanel> </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) { System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("tr-TR"); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("tr-TR"); } protected void TreeView1_ItemPopulate(object sender, EO.Web.NavigationItemEventArgs e) { EO.Web.TreeNode node = new EO.Web.TreeNode(); node.Text = "test"; node.PopulateOnDemand = true; e.TreeNode.ChildNodes.Add(node); } }
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,217
|
Hi Ilan,
AJAX solution only works with utf-8. You can not use any other type --- you will get view state error if you do. This is not just our CallbackPanel. ASP.NET AJAX also does that.
Thanks
|
|
Rank: Advanced Member Groups: Member
Joined: 5/31/2007 Posts: 36
|
but it only started to happen after using the populate on demand feature i've never had any problem with that before
|
|
Rank: Advanced Member Groups: Member
Joined: 5/31/2007 Posts: 36
|
ok, i've tested it with Atlas ajax and windows deafult tree view and the its ok every time i hit postback, it looks like a problem with your callback
<%@ 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"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <asp:updatepanel id="UpdatePanel1" runat="server"> <contenttemplate> <asp:treeview id="TreeView1" runat="server" imageset="Contacts" nodeindent="10"> <parentnodestyle font-bold="True" forecolor="#5555DD" /> <hovernodestyle font-underline="False" /> <selectednodestyle font-underline="True" horizontalpadding="0px" verticalpadding="0px" /> <nodes> <asp:treenode text="New Node" value="New Node"> <asp:treenode text="New Node" value="New Node"></asp:treenode> </asp:treenode> <asp:treenode text="New Node" value="New Node"> <asp:treenode text="New Node" value="New Node"></asp:treenode> </asp:treenode> <asp:treenode text="New Node" value="New Node"></asp:treenode> <asp:treenode text="New Node" value="New Node"></asp:treenode> </nodes> <nodestyle font-names="Verdana" font-size="8pt" forecolor="Black" horizontalpadding="5px" nodespacing="0px" verticalpadding="0px" /> </asp:treeview> <asp:button id="Button1" runat="server" text="Button" /> </contenttemplate> <triggers> <asp:asyncpostbacktrigger controlid="Button1" /> </triggers> </asp:updatepanel> </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) { System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("tr-TR"); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("tr-TR"); } }
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,217
|
You didn't run into it doesn't mean it doesn't exist. :) http://forums.asp.net/p/1020399/1898704.aspxPopulating on demand and view state themselves are tricky issues when they are put together. Generally view state should not be used when using populating on demand because the purpose of populating on demand is for loading large TreeView node by node without going back to the server. For this reason the dynamically populated nodes are not stored in the view state. We however do log calls to ItemPopulate event and "reply" them. So there might be some indirect connection on that but as a general rule, AJAX solution should use UTF-8, or you can get into some really strange error. Thanks
|
|
Rank: Advanced Member Groups: Member
Joined: 5/31/2007 Posts: 36
|
has for populating on demand issue, i have another example with much simple code
just put a button inside a callack and trigger the callback i get the error (persist view state=true)
now when using atlas callback it works ok
it seems like microsoft solved this??
|
|
Rank: Advanced Member Groups: Member
Joined: 5/31/2007 Posts: 36
|
also i have the <globalization requestEncoding="UTF-8" responseEncoding="UTF-8"></globalization> configured in my web.config
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,217
|
Sign...if you refuse to believe us then I am not sure whether we can help you much further. ASP.NET AJAX was released this January and there has been no official release after that. UTF-8 is a browser restriction related to browser's implementation of encodeURIComponent and it doesn't really have too much to do with anything else. It's possible to override that function but there are severe side effects.
ASP.NET AJAX has the same problem ---- but it may manifest under different scenarios, it generally does not throw out an error, but it gives you wrong contents for your textbox in the page. To see the error, try change encoding in your web.config, put a TextBox in an UpdatePanel, then type in some characters other than standard ASCII characters (many extended Europe characters, such as Russian characters will do), trigger the UpdatePanel and put a breakpoint on the server side you will see TextBox1.Text shows you garbage data.
Come back to your code, the only thing you need to do is to remove the code in your Page_Load that set the CurrentCulture, and make sure you have UTF-8 in your web.config and the code should work fine.
The issue is now closed. If you still believe ASP.NET AJAX can work with other encoding you can certainly go ahead to take the risk.
|
|
Rank: Advanced Member Groups: Member
Joined: 5/31/2007 Posts: 36
|
you don't have to get upset i believe you. i've red the aticle and it really seems to be a problem in ajax. i just wish there where some solution for this, since globaliztion is used on many servers, maybe add a property to callback settings its culture overiding the page culture (i've seen this in some controls) . any way i will do some work around, thanks anyway.
|
|