2011-11-09 32 views
1

的字符串表示'(集合)'中無法創建類型爲'System.Collections.Generic.List'的對象我已經在asp.net中創建了自定義Web服務器控件。我想在RenderContents方法中渲染一個類的List。從''屬性

這裏是我的代碼:

所有的
[DefaultProperty("Items")] 
[ToolboxData("<{0}:News runat=server></{0}:News>")] 
public class News : WebControl 
{ 

    [Bindable(true)] 
    [Category("Appearance")] 
    [DefaultValue("")] 
    [Localizable(true)] 
    public List<NewsItem> Items 
    { 
    get 
    { 
    List<NewsItem> items = (List<NewsItem>)(ViewState["Items"] == null ? new List<NewsItem>(): ViewState["Items"]); 
    return items; 
    } 

    set 
    { 
    ViewState["Items"] = value; 
    } 
    } 

    protected override void RenderContents(HtmlTextWriter output) 
    { 
    foreach (var item in Items) 
    item.RenderControl(output); 

    } 
} 

首先,當我拖動此控件拖放到頁面上,我可以在設計時的屬性窗口中訪問項目屬性。

下面是它的ASPX代碼:

<Aram:News ID="News1" runat="server" /> 

後,我修改的項目(與價值說它是一家集出現),我沒有看到在設計視圖的任何更新。

後,我點擊確定,並開始調試,我得到的錯誤:

Cannot create an object of type 'System.Collections.Generic.List`1[[AramWebControls.NewsItem, Custom Web Server Control, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' from its string representation '(Collection)' for the 'Items' property. 

現在我回頭看我的控制的ASPX代碼,它有它的商品屬性設置爲「(集)」。

<Aram:News ID="News1" runat="server" Items="(Collection)" /> 

如何解決這個問題?我擔心我的控件應該有List控件作爲內容。

任何幫助將不勝感激。

謝謝。

+0

這是什麼意思'Items =「(Collection)」'? 「集合」字符串顯式設置或這裏是一些數據綁定到一個屬性? – sll

+0

@sll我不會觸及aspx代碼。我只是從屬性窗口更新設計時屬性,並添加了一些項目。當我完成時,它只是以這種方式顯示它。當您從屬性窗口中單擊「Items」屬性時,您看不到添加的項目。它再次是空的。你有沒有設計過一個自定義的網頁控制? –

回答

0

我找到了解決這個問題的方法。 首先,這些項目是List類型的,這是一個集合。它不能被持久化在新聞控件標籤內。所以它必須是News控件標籤內容的一部分。這需要自定義視圖狀態管理。

有關詳細信息,您可以先參考Web Control Collection Property Example 然後您需要重寫LoadViewState,SaveViewState和TrackViewState來處理項目。欲瞭解更多信息,請參考Server Control Properties Example

0

我在我的ASP.net項目的設計器中有類似的錯誤。該代碼生成並運行正常,但設計顯示了以下錯誤:

Error Creating Control - [ServerControlNameOmitted] Cannot create an object of type 'System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' from its string representation '(Collection)' for the 'CustomProperties' property. 

我以前曾在服務器控件的代碼的相關屬性這個屬性:

[Browsable(false)] 
public Dictionary<string, object> customProperties { get; set; } 

要解決它,我把它改成這樣的:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 
public Dictionary<string, object> customProperties { get; set; } 

注意,我不是要堅持回發之間customProperties裏面。