禁用ASP.NET AJAX的原因

时间:2011-05-20 13:02:45

标签: asp.net asp.net-ajax webforms

我有一个使用ASP.NET AJAX和AJAX Control Toolkit的ASP.NET应用程序。该应用程序在PC上的所有最新浏览器上运行良好。它也适用于我的iPad,至少在第一次访问应用程序时。我发现如果我关闭iPad并稍后返回页面(通过书签或类似文件),该网站就会被破坏。我已经缩小了ASP.NET/ASP.NET AJAX问题/ bug /限制的失败,我正在寻求一些帮助来推进。

使用Fiddler作为iPad的代理服务器,我在重新打开页面时发现了以下问题。

  1. 我的* .skin文件未正确应用。生成的样式标记不包含* .skin文件中指定的某些参数。
  2. 该页面不包含MicrosoftAjaxWebForms.js文件。 (工作时,它会在所有ToolkitScriptManager脚本的正上方发出对ScriptResource.axd的引用。
  3. 该页面不包含对以函数WebForm_FindFirstFocusableChild(control)开头的另一个js文件的引用
  4. 该页面不包含一些隐藏字段,例如__LASTFOCUS,__ EVENTTARGET和__EVENTARGUMENT
  5. 该页面不包含使用document.forms ['aspnetForm']和定义__doPostBack的脚本块。
  6. 该页面不包含执行Sys.WebForms.PageRequestManager._initialize的脚本块
  7. 其他一些初始化脚本不存在(设置焦点,创建updateprogress等)
  8. 不知何故,框架似乎决定它不需要这些脚本并且不会发出它们。鉴于所有脚本都是相互关联的,必然有一个共同的原因。这可能与不包含* .skin属性的原因有关。有任何想法吗?我会想到浏览器功能,但这只发生在后续访问网站,而不是第一次。

    编辑: 绝对看起来像浏览器功能问题。

    请求工作: 用户代理:Mozilla / 5.0(iPad; U; CPU OS 4_3_3,如Mac OS X; en-us)AppleWebKit / 533.17.9(KHTML,与Gecko一样)版本/ 5.0.2

    请求不: 用户代理:Mozilla / 5.0(iPad; U; CPU OS 4_3_3,如Mac OS X; en-us)AppleWebKit / 533.17.9(KHTML,与Gecko一样) Mobile / 8J2

    将尝试在App_Browsers中创建自定义文件并使用额外信息发回。

2 个答案:

答案 0 :(得分:6)

根本问题确实是ASP.NET将iPad识别为通用的下层“Mozilla”而不是Safari,当应用程序以全屏模式加载时。它认为JavaScript不受支持等。

解决方案是将以下内容添加到所有ASP.NET页面中(通过将其添加到所有ASP.NET页面派生自的基页)。

    protected void Page_PreInit(object sender, EventArgs e)
    {
        if (Request.UserAgent != null && Request.UserAgent.IndexOf("AppleWebKit", StringComparison.CurrentCultureIgnoreCase) > -1)
        {
            this.ClientTarget = "uplevel";
        }
    }

(我尝试创建一个* .browser文件但是失败了,因为它似乎没有出现我可以从我自己的文件中引用框架的* .browser文件。)

答案 1 :(得分:1)

我通常在global.asax

中执行此操作
void Application_BeginRequest(Object sender, EventArgs e)
{
    Request.Browser.Adapters.Clear();
}