Lost HTML Intellisense within ASP.NET AJAX Controls

本文解决ASP.NET AJAX Beta1版本中使用特定控件导致Visual Studio源代码编辑器IntelliSense功能失效的问题。提供了两种解决方案:保持.master文件在IDE中打开,或更改web.config中的标记前缀。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文出处:ScottGu's Blog 

Symptom:

You are using ASP.NET AJAX Beta1 or Beta2, and create a .aspx page that is based on a .master file.  You add the <asp:scriptmanger>, <asp:updatepanel>, <asp:updateprogress> or <asp:timer> control into the content page, and find that markup intellisense no longer works for these controls, or for any controls nested within them:

atlasintellisense.jpg

In the screen-shot above notice how the ScriptManager, UpdatePanel and ContentTemplate tags have the little red-squiggly lines underneath them.  You also won't get tag completion when you type these elements in the document.  You can still compile and run just fine, and the WYSIWYG designer works just fine.  But you do lose source editor intellisense.

Some Background on the Issue:

ASP.NET 2.0 added support for registering controls (both compiled and .ascx user controls) within your web.config file - removing the need to always add <%@ Register %> directives at the top of your page.  For more details on this and to see a sample in action, please check out my Tips and Tricks talk from the recent ASP.NET Connections conference.

One of the cool aspects of this feature is that it also now allows you to map the same tag prefix against multiple assemblies.  We use this with ASP.NET AJAX to have these controls use the <asp:> tag prefix, even though they live in a separate assembly from the system.web.dll file that contains the rest of ASP.NET.

Unfortunately we discovered a bug with the VS markup intellisense engine when doing the ASP.NET AJAX Beta1 release - which is that you lose intellisense when you map multiple assemblies against the <asp:> tag prefix and use the controls within a <asp:content> control in a .aspx page based on a master page. 

How to Fix This

The fix for the intellisense issue will be in VS 2005 SP1.

In the meantime there are two workarounds that you can use to fix it immediately:

1) Keep the .master file open within the Visual Studio IDE when working on the .aspx content page.  It turns out the intellisense engine only runs into issues if the .master file is closed.  As long as it is open within the same IDE, it resolves the assemblies just fine and will give you full intellisense:

intellisense2.jpg

The screen-shot above is with the exact same sample as the previous screen-shot.  The only difference is that I also have the Site.Master file open in the editor in the background.  When that file is open, I get full intellisense for the ASP.NET AJAX control elements and no intellisense errors.

Alternatively you could instead use the below technique if you don't want to keep the .master file open:

2) Go into your web.config file and change the tag-prefix naming for the ASP.NET AJAX controls to something other than <asp:>.  For example, instead of:

       < controls >
        
< add  tagPrefix ="asp"  namespace ="Microsoft.Web.UI"  assembly ="Microsoft.Web.Extensions" />
        <
add  tagPrefix ="asp"  namespace ="Microsoft.Web.UI.Controls"  assembly ="Microsoft.Web.Extensions"   />
      </
controls >

 

change them to something like this:

 

       < controls >
        
< add  tagPrefix ="ajax"  namespace ="Microsoft.Web.UI"  assembly ="Microsoft.Web.Extensions" />
        <
add  tagPrefix ="ajax"  namespace ="Microsoft.Web.UI.Controls"  assembly ="Microsoft.Web.Extensions"   />
      </
controls >

You'd then want to update your tag prefixes in your .aspx page to use this new tag prefix.

Either of these approaches will solve the problem and deliver full intellisense.  The issue should then be resolved completely with VS 2005 SP1.

Hope this helps (and sorry for the inconvenience),

Scott

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值