4

我一直想知道如何为用户控件做一个公共属性,就像 .NET 本机项目的集合属性(例如,ListBox 和 ListItems):

<asp:ListBox blablabla>
    <asp:ListItem></asp:ListItem> <- Inline item collection...
</asp:ListBox>

我一直在网上查,但没有任何成功。我认为它必须是我需要添加到属性中的任何类型的属性,或者应该需要由用户控件继承的接口,但对此一无所知,并且已经考虑了很长时间。

我必须在自定义用户控件上使用它,但 Visual Studio 没有将它识别为有效的项目集合。

假设我们有这个 userControl:

public partial class userControls_Blablabla : System.Web.UI.UserControl
{
  public List<configItem> ConfigItem {get; set; }

  blablabla...rest logic here...
}

public class configItem {
   public string Name {get; set;}
   public string Url {get; set;}
   public string Color {get; set;}

  blablabla...rest logic here...
}

应该怎么做,才能在 Visual Studio 的 .ASPX 编辑器上做类似的事情,并被 Intellisense 识别?

<User_Control:userControls_Blablabla ID="blablabla" ...blablabla....>
   <ConfigItem Name="1" Url="...." Color="..." />
   <ConfigItem Name="2" Url="...." Color="..." />
   <ConfigItem Name="3" Url="...." Color="..." />
</User_Control:userControls_Blablabla>

对不起我的英语,我知道它不是很好。

提前致谢!

4

3 回答 3

4

您可以在控件类中放置您的类型列表并使用 PersistenceModeAttribute 进行装饰。

[PersistenceMode(PersistenceMode.InnerProperty)]
public List<configItem> ConfigItem { get; set; }

一个更好的例子:

http://am-blog.no-ip.org/BlogEngine/post/2010/04/13/ASP-NET-Custom-Control-with-PersistenceModeInnerProperty-using-Server-Controls.aspx

于 2011-12-22T10:02:58.527 回答
1

您需要使用足够的信息来装饰控件及其属性,以便设计人员可以在设计时获取详细信息。你检查过这个链接吗?

于 2011-12-22T10:09:32.460 回答
0

就像一个附加的 - 上面的链接真的很有帮助。我唯一要补充的是,您如何可以直接在您的网站中注册它,以便智能感知可以在没有其他程序集的情况下获取它。

按照描述创建类 - 如果渲染我覆盖 OnInit 方法,因为它被更早地调用,我可以使用其他道具玩更多。创建 2 个命名空间:

namespace x.Controls.Conference - add the class that derives from UserControl
{ 
    public partial class SlideShow : System.Web.UI.UserControl{...}
}

namespace x.Controls.Conference.SlideShowUC - add here the base class of the collection item in the UC (Collection<Slide>)
{
 public class Slide{...}
 public class SlideCollectionEditor : CollectionEditor{...}
}

现在您可以直接在您的 aspx 页面或 web 配置中注册它们,具体取决于您使用控件的频率。

网页配置

<add tagPrefix="ucSlideShow" tagName="SlideShow" src="~/x/Controls/Conference/SlideShow.ascx" />
<add tagPrefix="ucSlideShow" namespace="x.Controls.Conference.SlideShowUC" assembly="WebAssembly" />

<%@ Register TagPrefix="ucSlideShow" TagName="SlideShow" src="~/x/Controls/Conference/SlideShow.ascx"  %>
<%@ Register TagPrefix="ucSlideShow" namespace="x.Controls.Conference" assembly="WebAssembly"  %>
于 2012-10-30T09:05:52.253 回答