将非基本值分配给用户控件属性?

4

我已经建立了一个用户控件,它有一个公共属性string[] foo

在实际的标记中分配这个属性是可能的吗?

项目类型是ASP.NET WebForms / Web应用程序。

我尝试了以下语法,但它并不起作用:(它编译了,但值从未被分配)。

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

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"};
}

尝试这种方式,看看是否有效。


有趣。我还没有检查过,但我假设DataBinding事件只有在控件实现了某个特定接口后才会被调用? - maxp
@maxp:所有控件都有一个DataBinding事件。 - John Saunders

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接