2009-07-21 11 views
1

私はPlaceHolderから継承したサーバーコントロールを持っています。IPostbackHandlerを実装しています。

基本的に、すべてはプレースホルダで、上部は"<div class etc..."、下部は閉じます。

ので、典型的な使い方は

<control:control runat="server" id="phControl"> 
    <asp:TextBox runat="server" id="txtControl"> 
    <asp:DropDownList runat="server"id="ddlControl"> 
</control:control> 

または類似のものになるだろう。

私がコントロールにポストバックすると、ddlControl(または何でも)のすべての項目が失われ、IPostBackHandlerを実装すると明らかにすべての不具合が解決されることに私は打撃を受けました。

私は

に任意のポインタをドキュメントを通じて一目を持っていましたが、(明らかに私は、メソッド名を持っていますが、私は本当にここで期待されているものを得ることはありません)まだ私が実装しています本当にわかりません正しい方向へと大きく評価されるだろう。

おかげで、

ティム

答えて

1

あなただけの他のコントロールまたは「テンプレート」が含まれ、私はただの例を使用して、これを行っていることができ、サーバ制御したいようにそのルックス:http://msdn.microsoft.com/en-us/library/ms178657.aspx

をこれは、ポストバックで行われたすべての作業を処理する必要があります。

上記のリンクから適応された基本的な例:

using System; using System.ComponentModel; using System.Security.Permissions; ; using System.Web; using System.Web.UI; using System.Web.UI.Design; using System.Web.UI.WebControls;

名前空間Made4Print.Web.UI {[AspNetHostingPermission(SecurityAction.InheritanceDemand、レベル= AspNetHostingPermissionLevel.Minimal)、AspNetHostingPermission(SecurityAction.Demand、レベル= AspNetHostingPermissionLevel.Minimal)、デザイナー(typeof演算(VacationHomeDesigner))、DefaultProperty( "Title")、ToolboxData( "< {0}:TemplateContainer runat = \"サーバー\ ">")] パブリッククラスTemplateContainer:CompositeControl { プライベートITテンプレートtemplateValue; プライベートTemplateOwner ownerValue;

[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public TemplateOwner Owner 
    { 
     get 
     { 
      return ownerValue; 
     } 
    } 

    [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty), DefaultValue(typeof(ITemplate), ""), Description("Control template"), TemplateContainer(typeof(TemplateContainer))] 
    public virtual ITemplate Template 
    { 
     get 
     { 
      return templateValue; 
     } 
     set 
     { 
      templateValue = value; 
     } 
    } 

    protected override void CreateChildControls() 
    { 
     Controls.Clear(); 
     ownerValue = new TemplateOwner(); 

     ITemplate temp = templateValue; 
     if (temp == null) 
     { 
      temp = new DefaultTemplate(); 
     } 

     temp.InstantiateIn(ownerValue); 
     this.Controls.Add(ownerValue); 
    } 

    public override void DataBind() 
    { 
     CreateChildControls(); 
     ChildControlsCreated = true; 
     base.DataBind(); 
    } 

} 

[ToolboxItem(false)] 
public class TemplateOwner : WebControl 
{ 
} 

#region DefaultTemplate 
sealed class DefaultTemplate : ITemplate 
{ 
    void ITemplate.InstantiateIn(Control owner) 
    { 
     // Create Controls Here 
     //Label title = new Label(); 
     //title.DataBinding += new EventHandler(title_DataBinding); 
     //owner.Controls.Add(title); 
    } 

    //void title_DataBinding(object sender, EventArgs e) 
    //{ 
    // Label source = (Label)sender; 
    // TemplateContainer container = (TemplateContainer)(source.NamingContainer); 
    // source.Text = container.Title; 
    //} 
} 
#endregion 


public class VacationHomeDesigner : ControlDesigner 
{ 

    public override void Initialize(IComponent Component) 
    { 
     base.Initialize(Component); 
     SetViewFlags(ViewFlags.TemplateEditing, true); 
    } 

    public override string GetDesignTimeHtml() 
    { 
     return "<span>[Template Container Control]</span>"; 
    } 

    public override TemplateGroupCollection TemplateGroups 
    { 
     get 
     { 
      TemplateGroupCollection collection = new TemplateGroupCollection(); 
      TemplateGroup group; 
      TemplateDefinition template; 
      TemplateContainer control; 

      control = (TemplateContainer)Component; 
      group = new TemplateGroup("Item"); 
      template = new TemplateDefinition(this, "Template", control, "Template", true); 
      group.AddTemplateDefinition(template); 
      collection.Add(group); 
      return collection; 
     } 
    } 


} 

}

関連する問題