2011-02-02 8 views
4

パブリックプロパティstring[] fooを持つユーザーコントロールを作成しました。非プリミティブな値をユーザーコントロールのプロパティにアサインする?

これを実際のマークアップに割り当てることはできますか?

プロジェクトの種類は、ASP.NET webforms/webアプリケーションです。

Iveは次の構文を試しましたが、動作しません。(コンパイルされますが、値は決して割り当てられません)。

<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

+0

@maxp:すべてのコントロールには、DataBindingイベントがあります。 –

関連する問題