0

この方法でASP.NETパネルのレンダリングをカスタマイズしようとしています...

 [DefaultProperty("ID")]
    [ToolboxData("<{0}:NFormPanel runat=server></{0}:NFormPanel>")]
    [Description("Aldammam panel.")]
    [ParseChildren(false)]
    [PersistChildren(true)]
    public class NFormPanel : Panel, INamingContainer
    {


        protected override void RenderContents(HtmlTextWriter output)
        {
            var sb = new StringBuilder();
            sb.AppendLine("<table class=\"con-table\" style=\"width: 100%;\">");
            output.Write(sb.ToString());
            if (HasControls())
            {

                this.RenderChildren(output);
            }
            sb.Clear();
            sb.AppendLine("</table>");
            output.Write(sb.ToString());

        }


    }

...しかし、出力は最初にパネルコントロールをレンダリングし、次に次のようにテーブルをレンダリングします...

 <div>
   <input name="TextBox1" type="text" id="TextBox1">
   <table class="con-table" style="width: 100%;">
   </table>
 </div>

以下の例のように、テーブル内の子コントロールが欲しいです...

<div>
  <table class="con-table" style="width: 100%;">
    <input name="TextBox1" type="text" id="TextBox1">
  </table>
</div>
4

1 に答える 1

0

代わりに render メソッドを使用します。

protected override void Render(HtmlTextWriter output)
{
     var sb = new StringBuilder();
     sb.AppendLine("<table class=\"con-table\" style=\"width: 100%;\">");
     output.Write(sb.ToString());

     if (HasControls())
     {
         //Alternatively call base.Render() which renders the panel's DIV
         this.RenderChildren(output); //renders inner children only without panel DIV
     }

     sb.Clear();
     sb.AppendLine("</table>");
     output.Write(sb.ToString());

}
于 2013-03-11T12:57:44.177 に答える