I got a really weird Ajax bug the other day. I was working on an ASP.Net website and got this cryptic error whenever clicking a postbacking button within an Ajax update panel.
Microsoft JScript runtime error: Sys.InvalidOperationException: The history state must be small enough to not make the url larger than 1024
Then, re-clicking a tab, you get another ajax error:
Microsoft JScript runtime error: Object doesn't support this property or method
At this line:if (element.tagName && (element.tagName.toUpperCase() === "SCRIPT"))
In this specific case, the element tag didn't have the toUpperCase() method. It had worked before, everything seemed strange. To make a long story short, it appeared to be a problem from installing VS SP1. We had installed the old Ajax toolkit. The new SP updated the System.Web.Extensions.dll assembly in the GAC, which created different script resource files.
Old (which worked) | New (which did not work) |
|
|
It worked on some machines and not on others because some machines had SP1 installed, and others did not. The new version is installed in the GAC, so the web app would always reference the new one. Note that both had the exact same credentials (like assembly version= 3.5.0.0), but different file versions.
Eventually, to get things working, we just uninstalled the new one from the GAC. (I guess if we had sufficient time, we'd see how to make the app play nice with the new DLL). However, this was tricky because we couldn't just do a normal windows uninstall. Running:
Gacutil /uf System.Web.Extensions
Will return:
Assembly could not be uninstalled because it is required by Windows Installer
Number of assemblies uninstalled = 1
Number of failures = 0
This blog explained that that’s essentially a bug, and we can fix it from the registry.
http://blogs.msdn.com/alanshi/archive/2003/12/10/42690.aspx
Go to registry, for this key:
[HKLM\SOFTWARE\Classes\Installer\Assemblies\Global]
for this item:System.Web.Extensions,version="3.5.0.0",publicKeyToken="31bf3856ad364e35",
processorArchitecture="MSIL",fileVersion="3.5.30729.1",culture="neutral"
and remove its data, so that in the "Edit multi-string" dialogue box, the "Value data" textbox is empty.
Now, you can remove form the GAC by running:
Gacutil /uf System.Web.Extensions
And confirm removal:
Gacutil /l System.Web.Extensions
NOTE – you may need to copy the System.Web.Extensions to your web’s bin folder and recompile the solution in VS.
Lastly, to make all the other websites still work, re-install the old dll:
gacutil /i C:\MyProject\System.Web.Extensions.dll
You should now be able to hit postbacks within Ajax update panels without errors.
No comments:
Post a Comment