2009-06-17 65 views
0

我有一個Repeater用作Paging TagCloud。這樣做,我已經添加了頁面的ViewState的簡單屬性,如頁面,RowCount等...以簡單的方式繼承Web服務器控件?

我覺得它不屬於那裏,但我有與服務器控件,調試,dll不好的經驗和部署。

我可以只繼承Repeater類,添加一些ControlState/ViewState屬性,並且能夠正確使用它作爲從ToolBox直接拖動的Repeater?

這裏,具有下面的簡單類:

public class TagCloud : Repeater 
{ 
    public int selectedIndex; 

    public TagCloud() 
    { 
     selectedIndex = -1; 
     // 
     // TODO: Add constructor logic here 
     // 
    } 

    public int SelectedIndex 
    { 
     get { return selectedIndex; } 
     set { selectedIndex = value; } 
    } 
} 

而無需創建一個新的WebControlLibrary項目,可能這個CS文件矗立在App_Code文件夾和工作像預期?

謝謝。

回答

0

是的,這樣做沒有問題。只要您使用控件的屬性語法:

公衆詮釋行數
{

get { return (int) (ViewState["RowCount"] ?? 0); } 
    set { ViewState["RowCount"] = value; } 

}

此外,爲了讓你的屬性看起來一樣的默認的,你可以添加說明或DefaultValue屬性。

+0

我知道如何聲明使用ViewState的屬性,如果我缺少屬性,它可能是在類級別,因爲我的ToolBox中沒有「TagCloud」。 – maxbeaudoin 2009-06-17 14:43:28

+1

要在工具箱中擁有自定義控件,您需要在新的dll項目中創建它,然後通過「選擇項目」屬性將其添加到工具箱中。 – 2009-06-17 14:49:07

0

這是有效的,並且是建立服務器控制的一種建議方式。試試看看。

+0

我有一個類從一個簡單的int屬性Repeater繼承的TagCloud。我必須缺少屬性,因爲控件似乎沒有暴露在ToolBox中。我需要這樣做的最低要求。 – maxbeaudoin 2009-06-17 14:48:46

0

從ASP Repeater繼承是一種完全有效的方法,只要您正在構建的控件是具有附加屬性的中繼器。

如果您覺得您需要的控件實際上是「其他東西」,恰好有一箇中繼器作爲其控件集的一部分,那麼您可能需要製作一個複合控件,它將控制集合中的一箇中繼器與無論需要什麼其他控制。

例如,您可能想要擁有一個具有中繼器,搜索結果標籤,轉到中繼器內容頂部和底部的鏈接等的控件。此組合控件不是中繼器,但是確實使用中繼器。