2009年5月26日 星期二

The control with ID 'endCalendarExtender' requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.

當 Web Application 由 ASP.NET 2.0升級到 3.5 後,原本一些網頁有使用 ASP.NET AJAX 1.0 的,全部掛了。錯誤訊息如下

The control with ID 'endCalendarExtender' requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.

為什麼呢?原來 Ajax control toolkit (ACT) 有許多版本,我使用的是搭配 ASP.NET AJAX 1.0 的版本。之後,微軟推出 ASP.NET 3.5 後,Ajax control toolkit 也出了搭配 3.5 的元件。但我仍未升級 ACT, 仍舊使用舊版的ACT。

因此,執行的過程中,舊版的 Ajax control toolkit 要找 ASP.NET AJAX 1.0 中的 ScriptManager,當然找不到。

此時,需要指定 runtime 的 相容性版本。如下。

 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
請參考這裡

沒有留言:

Share with Facebook