因此,我已经在这个项目上工作了几天,但一直无法解决为用户控件(ascx,请注意)的自定义内部属性获取智能感知支持的问题。
我已经多次看到这个问题的解决方案(使用服务器控件,.cs 请注意)。在此写出article很好。使用 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>
我认为问题在于智能感知引擎如何遍历支持类。我看到的所有工作示例都不是 ascx,而是 Web 服务器控件(cs,在编译的程序集中)。
如果有人可以阐明如何使用 ascx 控件来完成此操作,我将不胜感激。
我之前已经解决了这个问题,方法是从页面中删除所有用户控件和指令,然后将标记切换到设计视图。然后,将 ascx 文件从解决方案资源管理器拖动到设计窗口。如果您切换回标记视图,智能感知会突然拾取所有属性。我确信有更好的方法,但我从未找到有效的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)