【问题标题】:Gzip is messing AjaxControlToolKitGzip 搞砸了 AjaxControlToolKit
【发布时间】:2012-09-23 14:48:24
【问题描述】:

有一个表单,其中包含来自 ajaxcontroltoolkit 的 tabcontainer 和 watermark 控件。它是 使用以下 gzip 过程时出现 java 错误:Sys.Extended 未定义。以下代码来自 Global.asax 文件:

void Application_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        HttpApplication app = sender as HttpApplication;
        string acceptEncoding = app.Request.Headers["Accept-Encoding"];
        Stream prevUncompressedStream = app.Response.Filter;

        if (!(app.Context.CurrentHandler is Page ||
            app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
            app.Request["HTTP_X_MICROSOFTAJAX"] != null)
            return;

        if (acceptEncoding == null || acceptEncoding.Length == 0)
            return;

        acceptEncoding = acceptEncoding.ToLower();

        if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
        {
            // defalte
            app.Response.Filter = new DeflateStream(prevUncompressedStream,
                CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "deflate");
        }
        else if (acceptEncoding.Contains("gzip"))
        {
            // gzip
            app.Response.Filter = new GZipStream(prevUncompressedStream,
                CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "gzip");
        }
    }

当我删除上面的代码时,错误消失了,一切正常。

这是来自 web.config 的控制标签:

<controls>
    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add tagPrefix="ajaxToolkit" namespace="AjaxControlToolkit" assembly="AjaxControlToolkit"/>
    <add tagPrefix="HTMLEditor" namespace="AjaxControlToolkit.HTMLEditor" assembly="AjaxControlToolkit"/>
</controls>

当我运行 alert(Sys.Extended.UI.TabPanel);在萤火虫控制台中,我收到错误“Sys.Extended 未定义”。但是当我只运行 alert(Sys.Extended);是给出消息“未定义”而不是错误。这有意义吗?而且我还想提一下,当我从浏览器保存页面时,我给出了一条消息“无法保存 default.js,因为无法读取源文件”并且我没有在页面中找到页面的 .js 文件default_files 文件夹。但是当我从 global.asax 文件中删除 gzip 代码时,我在 default_files 文件夹中找到了 default.js 文件。

【问题讨论】:

    标签: asp.net gzip ajaxcontroltoolkit gzipstream


    【解决方案1】:

    您在使用 ToolKitScriptManager 吗?如果是,请检查复合脚本的顺序是否正确:

    <compositescript>
        <scripts>
            <asp:scriptreference name="WebForms.js" assembly="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" scriptmode="Release"></asp:scriptreference>    
            <asp:scriptreference name="WebUIValidation.js" assembly="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" scriptmode="Release"></asp:scriptreference>    
            <asp:scriptreference name="MicrosoftAjax.js" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" scriptmode="Release"></asp:scriptreference>    
            <asp:scriptreference name="MicrosoftAjaxWebForms.js" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" scriptmode="Release"></asp:scriptreference>
        </scripts>
    </compositescript>
    

    Sys is undefined中提到的更多可能性

    【讨论】:

    • 是的,我正在使用 ToolkitScriptManager,但是我在 web.config 中没有找到复合脚本标记。我使用的版本是VS2008中的ASP.NET 2.0。
    • @Zubarik - 也许你可以尝试添加它,看看问题是否得到解决。
    • 不,问题依然存在:“default.js 无法保存,因为无法读取源文件”。未找到导致“系统未定义”错误的 default.js...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多