3
因此,我已经在这个项目上工作了几天,并且一直无法解决为用户控件的自定义内部属性获取智能感知支持的问题(ascx,介意你)。声明性地描述自定义控件属性时缺少智能感知
我已经多次看到了解决方案(使用服务器控件,.cs介意你)。在这article非常好地阐述了。除了intellisense,使用ascx控件时,一切都适用于我。
这里是我的代码的轮廓:
[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;
}
}
}
这里是我的标记(这对孩子对象申报工作正常,只是没有智能感知):
<%@ 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>
我认为问题在于intellisense引擎如何遍历辅助类。我看到的所有工作示例不是ascx,而是Web服务器控件(cs,在编译的程序集中)。
如果有人可以阐明如何使用ascx控件完成这一点,我会很感激。
不幸的是,这不适用于控件的内部属性。 只是澄清一点,我在内联属性(如“BreadCrumbTitleText”)中接收intellisense,但未在内部属性(如“BreadCrumbItem”)中接收到intellisense。 – 2010-05-21 22:07:19