Asp.net 声明性描述自定义控件属性时缺少Intellisense

Asp.net 声明性描述自定义控件属性时缺少Intellisense,asp.net,user-controls,intellisense,Asp.net,User Controls,Intellisense,因此,我已经在这个项目上工作了几天了,但一直无法解决为用户控件的自定义内部属性(请注意,ascx)获得intellisense支持的问题 我已经看过很多次这个解决方案(使用服务器控件,.cs提醒你)。在这本书中写得很好。在使用ascx控件时,除了intellisense之外,其他一切都适合我 以下是我的代码概要: [PersistChildren(true)] [ParseChildren(typeof(BreadCrumbItem))] [ControlBuilder(typeof(Bread

因此,我已经在这个项目上工作了几天了,但一直无法解决为用户控件的自定义内部属性(请注意,ascx)获得intellisense支持的问题

我已经看过很多次这个解决方案(使用服务器控件,.cs提醒你)。在这本书中写得很好。在使用ascx控件时,除了intellisense之外,其他一切都适合我

以下是我的代码概要:

[PersistChildren(true)]
[ParseChildren(typeof(BreadCrumbItem))]
[ControlBuilder(typeof(BreadCrumbItem))]
public partial class styledcontrols_buttons_BreadCrumb : System.Web.UI.UserControl
{
    ...

    [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
    public List<BreadCrumbItem> BreadCrumbItems
    {
        get { return _breadCrumbItems; }
        set { _breadCrumbItems = value; }
    }

    ...

    protected override void AddParsedSubObject(object obj)
    {
            base.AddParsedSubObject(obj);
            if (obj is BreadCrumbItem)
                    BreadCrumbItems.Add(obj as BreadCrumbItem);
    }

    ...

    public class BreadCrumbItem : ControlBuilder
    {
        public string Text { get; set; }
        public string NavigateURL { get; set; }

        public override Type GetChildControlType(string tagName, System.Collections.IDictionary attribs)
        {
            if (String.Compare(tagName, "BreadCrumbItem", true) == 0)
            {
                return typeof(BreadCrumbItem);
            }
            return null;
        }
    }
}
[持久化子项(true)]
[ParseChildren(typeof(BreadCrumbItem))]
[ControlBuilder(类型(面包屑))]
公共部分类样式控件\按钮\面包屑:System.Web.UI.UserControl
{
...
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
公开名单面包屑
{
获取{return\u breadCrumbItems;}
设置{u breadCrumbItems=value;}
}
...
受保护的覆盖无效AddParsedSubObject(对象obj)
{
base.AddParsedSubObject(obj);
if(obj是面包屑)
添加(obj作为BreadCrumbItem);
}
...
公共类面包屑:ControlBuilder
{
公共字符串文本{get;set;}
公共字符串NavigateURL{get;set;}
公共重写类型GetChildControlType(字符串标记名,System.Collections.IDictionary属性)
{
if(String.Compare(标记名“BreadCrumbItem”,true)=0)
{
返回类型(面包屑);
}
返回null;
}
}
}
下面是我的标记(工作正常,只是在子对象声明上没有intellisense):


...
我认为问题在于intellisense引擎如何遍历支持类。我看到的所有工作示例都不是ascx,而是Web服务器控件(cs,在编译的程序集中)


如果有人能解释一下如何使用ascx控件来实现这一点,我将不胜感激。

我以前已经解决了这个问题,从页面中删除了所有用户控件和指令,然后将标记切换到设计视图。然后将ascx文件从解决方案资源管理器拖动到设计窗口。如果您突然切换回标记视图,IntelisSense将拾取所有属性。我确信有更好的方法,但我从未找到一种有效的方法。

不幸的是,这对控件的内部属性不起作用。只是澄清一下,我在内联属性(如“BreadCrumbTitleText”)中接收intellisense,但在内部属性(如“BreadCrumbItem”)中不接收intellisense。
<%@ Register src="../styledcontrols/buttons/BreadCrumb.ascx" tagname="BreadCrumb" tagprefix="uc1" %>

    ...

<uc1:BreadCrumb ID="BreadCrumb1" runat="server" BreadCrumbTitleText="Current Page">
    <BreadCrumbItem Text="Home Page" NavigateURL="~/test/breadcrumbtest.aspx?iwentsomewhere=1" />
    <BreadCrumbItem Text="Secondary Page" NavigateURL="~/test/breadcrumbtest.aspx?iwentsomewhere=1" />
</uc1:BreadCrumb>