.ASPX

2011-12-22 45 views
4

自定義用戶控件和友好屬性項集合(如ListBox和ListItems,但與列表 )我一直想知道很長一段時間如何做一個用戶控件的公共屬性,工作就像.NET本地項目的集合特性(例如,ListBox和listItems中): .ASPX

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

我一直在各地的網絡,但沒有任何sucess檢查。我認爲它必須是任何類型的屬性,我需要添加到屬性,OR接口,應該需要由用戶控件繼承,但沒有線索,並一直在考慮它很長一段時間。

我必須在自定義用戶控件上工作,但Visual Studio沒有將其識別爲有效的項目集合。

比方說,我們有這個用戶控件:

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編輯器,並得到由智能感知識別?

<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> 

對不起,我知道這不是很好。

在此先感謝!

回答

1

你需要裝飾的控制,它是有足夠的信息性質,設計師可以在設計時的細節回暖。 您是否檢查了這個link

+0

嗨ChrisBD,問題在於設計沒有將自定義類對象識別爲內部屬性,所以它告訴我,我無法在打開/關閉標記內放置任何項目。 我只需要像wnascimiento所說的那樣放置屬性[PersistenceMode(PersistenceMode.InnerProperty)]。 謝謝大家!我希望這個線程能夠幫助像我這樣的其他人:)。 – 2011-12-22 10:24:44

3

您可以在控件類中放置您的類型列表,並使用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

+0

嗨! 這正是我需要的!我非常確定它需要任何類型的屬性來告訴設計者它是用戶控件的內在屬性。 順便說一句,這個鏈接對我來說真的很有用,只是在考慮製作一個模板,所以它對我來說非常有用。 它的工作方式除外:) 謝謝你! – 2011-12-22 10:23:24

0

就像一個附加 - 上面的鏈接真的幫助。我想補充的唯一事情就是如何直接在網站上註冊它,以便intellisense在沒有其他裝配的情況下進行採集。

按照描述創建類 - 相反,如果渲染我重寫OnInit方法,因爲它先前被調用,我可以使用另一個prop來玩一些。 創建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配置,這取決於你將如何經常使用的控制。

Web配置

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

PAGE

wnascimiento
<%@ Register TagPrefix="ucSlideShow" TagName="SlideShow" src="~/x/Controls/Conference/SlideShow.ascx" %> 
<%@ Register TagPrefix="ucSlideShow" namespace="x.Controls.Conference" assembly="WebAssembly" %>