症狀:
你在使用ASP.NET AJAX Beta1 或 Beta2,創建了基於 .master 母版頁文件的一個.aspx 頁面,你添加了 <asp:scriptmanger>, <asp:updatepanel>, <asp:updateprogress> 或 <asp:timer> 控件到內容頁面,發現在這些控件或內嵌在它們中的任何控件裡,標識符號的Intellisense功能不工作了:
在上面的截圖裡,注意到ScriptManager, UpdatePanel and ContentTemplate標識符的下面有紅色的波浪形彎線。當你在文檔裡鍵入這些元素時,你也得不到標識符的自動完成。但你仍可以編譯,運行也沒問題,WYSIWYG 設計器照舊工作,但你失去了源碼編輯器裡的Intellisense功能。
該問題的一些背景知識:
ASP.NET 2.0添加了在web.config文件裡注冊控件的支持,無論是編譯過的還是.ascx 用戶控件,去掉了總是要在頁面的上方添加 <%@ Register %> 指令的要求。想了解這方面的細節,或看一個實際例子,請查看我最近在 ASP.NET Connections 大會上做的技巧和訣竅講座的內容。
這個特性的一個很酷的方面是,它現在也允許你把多個程序集映射到同個標識符前綴上。我們在ASP.NET AJAX 中使用了這個功能,以使上面這些控件使用 <asp:> 標識前綴,雖然它們居於包含了ASP.NET其他部分的 system.web.dll 外的另外的程序集之中。
不幸的是,我們在發布ASP.NET AJAX Beta1時,發現了VS標識符Intellisense引擎的一個缺陷,其問題在於,當你把多個程序集映射到同個 <asp:> 標識前綴時,而且在基於母版頁的.aspx內容頁面的 <asp:content> 裡使用這些控件時,你會失去Intellisense功能。
如何解決這個問題
這個intellisense的問題將在VS 2005 SP1裡解決。
與此同時,有2個替代方案,你可以馬上修正這個問題:
1) 編輯.aspx內容網頁時,在Visual Studio IDE中,把相關.master母版頁文件保持在打開狀態。發現其實只有在.master文件關閉時,Intellisense引擎才會出問題。只要該文件在同一個IDE裡一直是打開的,它定位程序集毫無問題,會給予你完整的Intellisense功能:
上面的截圖跟前面一個截圖是同一個例子,唯一的區別是,我在後面同時打開了Site.Master 文件。那個文件打開時,我就得到ASP.NET AJAX控件元素的完整的Intellisense功能,沒有Intellisense錯誤。
或者,如果你不想把 .master 文件保持打開的話,你也可以使用下面這個方法:
2) 進入你的web.config文件,把ASP.NET AJAX 控件的標識前綴改成不是 <asp:> 的別的東西。譬如,取代這個:
<controls>而把它們改成類似這樣:
<controls>然後,你要將你的.aspx 頁裡的標識前綴更新到使用這個新的標識前綴。
上面2種方法都可以解決問題,還你完整的 intellisense 功能。這個問題應該會在VS 2005 SP1裡被徹底解決。
希望本文對你有所幫助,我也為造成的不便表示歉意,