2011-02-02 60 views
4

我建立了一個擁有公共屬性string[] foo的用戶控件。將非基元值分配給用戶控件屬性?

是否可以在實際標記中分配此值?

項目的類型是ASP.NET webforms/web應用程序。

我試過下面的語法,但它不起作用:(它編譯但值從未分配)。

<abc:MyControl runat="server" foo='<%# new string[]{"Hello"} %>' /> 

回答

0

我從來沒有見過這樣的事情之前,通常用於數組我做這樣的事情:

<abc:MyControl runat="server" foo="This,Is,A,Test" /> 

public string foo { 
    get; 
    set; 
} 

public string[] foos { 
    get { return foo.Split(','); } 
    //set; if needed 
} 
2

您可能會發現PersistenceMode(PersistenceMode.InnerProperty)是感興趣的。 PersistenceMode屬性允許您創建具有嵌套屬性的屬性。請注意,在這種情況下,您的aspx代碼將使用嵌套元素而不是屬性,因爲元素只能存儲字符串。

在這種情況下,你會做這樣的事情:

<abc:MyControl runat="server" > 
    <foo> 
     <element value="1" /> 
     <element value="2" /> 
    </foo> 
</abc:MyControl> 
2

數據綁定語法只是一個簡寫。

<abc:MyControl runat="server" ID="control1" foo='<%# new string[]{"Hello"} %>' /> 

<abc:MyControl runat="server" ID="control1" OnDatabinding="Databind_control1" /> 


protected void Databind_control1(object sender, EventArgs e) 
{ 
    ((MyControl) sender).foo = new string[]{"Hello"}; 
} 

速記嘗試這種方式,看看它是否工作。

+0

有趣。我沒有檢查,但我認爲只有在控件實現了某個接口後才調用DataBinding事件? – maxp 2011-02-02 16:59:06