2011-02-02 40 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

相关问题