In this blog I will try to summarize the most common reasons for getting the famous 'Sys is undefined' error when running an Ajax enabled web site or application (there are almost one million results on Google for that phrase).
Where does it come from?
In every Ajax web page’s source you will see a code like this:
Sys.WebForms.PageRequestManager.getInstance()._updateControls(, , , 90);
This is the initialization script of the ScriptManager. So, if for some reason the Sys namespace is not available when the code executes you get the ‘Sys is undefined’ error.
Here are the most common reasons and solutions for that problem:
1. The error occurs when you have added a control from RadControls for ASP.NET AJAX, but your application is not configured to use ASP.NET AJAX.
For example, in VS 2005 you created a new Blank Site instead of a new Ajax-Enabled Web Site and the ‘Sys is undefined’ message pops up.
To fix it you need to follow the steps described at Configuring ASP.NET Ajax article (check the topic called Adding ASP.NET AJAX Configuration Elements to an Existing Web Site) or simply create the Ajax-Enabled Web Site. You can also check my other blog post on the matter: Visual Studio 2008: Where is the new ASP.NET Ajax-Enabled Web Site template?
2. Authentication - as the website denies access to all pages to unauthorized users, access to the Telerik.Web.UI.WebResource.axd handler is unauthorized (this is the default handler of RadScriptManager). This causes the handler to serve the content of the login page instead of the combined scripts, hence the error.
To solve it - add a <location> section to the application configuration file to allow access to Telerik.Web.UI.WebResource.axd to all users, like:
Note that the access to the standard ScriptResource.axd and WebResource.axd is automatically allowed for all users (authenticated and unauthenticated), so if you use the ScriptManager instead of RadScriptManager - you will not face this problem. The authentication problem does not manifest when you disable script combining or use the CDN. Adding the above configuration section will make it work with RadScriptManager’s combined script.
3. The IE6 browser fails to load the compressed script. The problem does not appear in any other browser. There is a well known bug in the older versions of IE6 which lose the first 2,048 bytes of data that are sent back from a Web server that uses HTTP compression. Latest versions of RadScriptManager does not compress the output at all if the client is IE6, but in the previous versions you need to manually disable the output compression to prevent the error. So, if you get the ‘Sys is undefined’ error in IE6 - update to the latest version of RadControls or simply disable the output compression.
4. Requests to the *.axd files returns Error Code 404 - Not Found. This could be fixed easily:
- Check in the IIS management console that the .axd extension (the default HTTP handler extension) is allowed:
- Also check if the “Verify if file exists” checkbox is unchecked (click on the “Edit” button appearing in the previous screenshot to check).
More information can be found in our troubleshooting article and from the ASP.NET QA team blog post.
5. The virtual directory in IIS is not marked as Web Application. Converting it to Web Application should fix the problem.
6. Check for the <xhtmlConformance mode="Legacy"/> option in your web.config and remove it. It would be rather rare to become a victim of this exact case, but still have it in mind. Scott Guthrie describes it in more details.
I hope that one of the above solutions will help you get rid of the ‘Sys is undefined’ error.