- - PR -
カスタム複合コントロール作成につきまして
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-04-11 16:01
毎々大変お世話になっております。
題記の件、ご質問をさせて頂きます。 現在、TABLEコントロール・REPEATERコントロールを内包した 複合コントロールを作成しています。 イメージ的には下記のような感じです。 ================================================================= <CUSTOM:FUKUGOUCONTROL ID="FUKUGOUCONTROL1" RUNAT="server"> <ASP:REPEATER ID="Repeater1" RUNAT="server"> <ITEMTEMPLATE> <ASP:TABLE ID="Table1" RUNAT="server" > <ASP:TABLEROW> <ASP:TABLECELL>AAA</ASP:TABLECELL> <ASP:TABLECELL>BBB</ASP:TABLECELL> </ASP:TABLEROW> <ASP:TABLEROW> <ASP:TABLECELL>CCC</ASP:TABLECELL> <ASP:TABLECELL>DDD</ASP:TABLECELL> </ASP:TABLEROW> </ASP:TABLE> </ITEMTEMPLATE> </ASP:REPEATER> </CUSTOM:FUKUGOUCONTROL> ================================================================= 現在、デザイン時にHTMLを確認すると 上記のような文字列を出力するように定義しています。 ※出力する処理は当複合コンとロールのデザインクラス内の GetPersistInnerHtmlメソッドで行っています。 しかし、実行時に 下記の通りのエラーメッセージが出力されてしまいます。 「型 FUKUGOUCONTROL に ASP:REPEATER という名前のプロパティは存在しません。」 上記現象の回避策等をご存知の方がいらっしゃいましたら、 ご教授の程、宜しくお願い致します。 以上 | ||||
|
投稿日時: 2005-04-11 22:23
> 「型 FUKUGOUCONTROL に
> ASP:REPEATER という名前のプロパティは存在しません。」 この通りでしょう。 ところで、参照記事が、URIが途中で切れているので参照できません。 ASP.NET サーバー コントロール開発の基本 複合サーバー コントロールのサンプル この辺りかな?用語は、MSDNに出てくるものと、極力あわせてください。「カスタム」コントロールには、サーバーコントロールとユーザーコントロールがあります。複合が付くから、サーバーコントロールでしょうけど。 それで、『上記のような文字列を出力するように』、どのように定義しましたか?なんとなく、InnerHTMLに、"<ASP:REPEATER..."と書くようなコーディングをしていると判断したのですが。 まぁ、『複合サーバー コントロールのサンプル』を、よく見てください。そんなことしてないはず。また、そんなコーディングをしなければならないのなら、面倒くさくて使ってられません。 あと、@ITで投稿時にエラーが出ても、投稿が受け付けられて、それを読み出すときにエラーになる確率が高いです。一度別のウインドウを開いて、投稿が受け付けられているか確認することをお勧めします。 また、30分以内であれば削除することも出来ますので、利用してください。 _________________ | ||||
|
投稿日時: 2005-04-12 09:20
何をしたいのかがわからないので想像ですが、子エレメントをプロパティでなくコントロールとして解釈させたいのなら
でいいのかもしれません。 | ||||
|
投稿日時: 2005-04-13 16:49
貴重なご意見ありがとうございます。
Jittaさん、ご指摘の通り、 InnerHTMLに直接文字列を書いていました。 これは、GetPersistInnerHtmlを参考に改善させて致しました。 お忙しい中申し訳ございませんが、 更に質問させて頂きたいと思います。 目的:カスタムコントロール内部にTable型のプロパティを 用意し、カスタムコントロールの一部としてテーブルを扱いたい。 この際、記述は下記の通りになると思います。 ------------------------------------------------ public class CustomControl: WebControl, INamingContainer { public Table _table = new Table(); public Table TableProperty { get { return _table; } set { return _table; } } ------------------------------------------------ 上記の通り記述し、IDE上で確認すると確かに TablePropertyプロパティのサブプロパティとして Tableコントロールのプロパティが表示され、 設定も可能です。 しかし、実行時に、上記オブジェクトを 参照するとIDEで設定した内容は何も反映されていません。 ※IDE上列・行を増やした際は、IDEのHTMLには反映されます。 上記問題の解決方法をご存知の方がいらっしゃいましたら ご教授の程、宜しくお願い致します。 以上 | ||||
|
投稿日時: 2005-04-13 17:18
TablePropertyに
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 属性を追加してみてください。 | ||||
|
投稿日時: 2005-04-15 09:45
にしざきさん、ご意見ありがとうございます。
結果を申し上げますと、下記の通り@を追加すると 子要素として認識され、HTMLに出力されます。 ※但し、<ASP:TABLE ID="Table1" RUNAT="server" > タグを HTMLに含めると解析エラーとなるため、 デザイン時には<ASP:TABLEROW>からHTMLに出力するようにしました。 (解析エラーになるのは、デザイン時も実行時も同様です。) ------------------------------------------------ [ParseChildren(true)] ← @ココを追加 public class CustomControl: WebControl, INamingContainer { public Table _table = new Table(); public Table TableProperty { get { return _table; } set { return _table; } } ------------------------------------------------ 以上が、現状報告となります。 で、更に質問を致します。 現状下記の通りにデザイン時にHTMLを生成しております。 ================================================================= <CUSTOM:FUKUGOUCONTROL ID="FUKUGOUCONTROL1" RUNAT="server"> <TEMPLATE_HEADER> <ASP:TABLEROW> <ASP:TABLECELL>AAA</ASP:TABLECELL> <ASP:TABLECELL>BBB</ASP:TABLECELL> </ASP:TABLEROW> </TEMPLATE_HEADER> <TEMPLATE_FOOTER> <ASP:TABLEROW> <ASP:TABLECELL>CCC</ASP:TABLECELL> <ASP:TABLECELL>DDD</ASP:TABLECELL> </ASP:TABLEROW> </TEMPLATE_FOOTER> </CUSTOM:FUKUGOUCONTROL> ================================================================= <TEMPLATE_HEADER>及び<TEMPLATE_FOOTER>はテンプレートとして 定義しております。 この状態で実行をしますと、下記のように出力されてしまいます。 ※<TABLE>タグは実行時に出力するようにしています。 ================================================================= <span id="FUKUGOUCONTROL1" > <TABLE> <ASP:TABLEROW> <ASP:TABLECELL>AAA</ASP:TABLECELL> <ASP:TABLECELL>BBB</ASP:TABLECELL> </ASP:TABLEROW> </TABLE> <TABLE> <ASP:TABLEROW> <ASP:TABLECELL>CCC</ASP:TABLECELL> <ASP:TABLECELL>DDD</ASP:TABLECELL> </ASP:TABLEROW> </TABLE> </span> ================================================================= テンプレートに含めた下記の要素をHTMLに変換するには 何が必要なのでしょうか? <ASP:TABLEROW> <ASP:TABLECELL>CCC</ASP:TABLECELL> <ASP:TABLECELL>DDD</ASP:TABLECELL> </ASP:TABLEROW> ちなみに、テンプレートは下記のように定義しております。 private ITemplate Header_Template; [PersistenceMode(PersistenceMode.InnerProperty), Browsable(false), DefaultValue((string) null), TemplateContainer(typeof(RepeaterItem))] public ITemplate TEMPLATE_HEADER { get { return this.Header_Template; } set { this.Header_Template= value; } } お忙しい中申し訳ございませんが、 ご存知の方がいらっしゃいましたら、ご教授の程 宜しくお願い致します。 以上 |
1