2012-05-09 8 views
1

私はFormViewを持つUserControlを持っています。ポストバック後にFormView.InsertItemTemlate内のITテンプレートが消える

フォームビューのみの背後にあるコードは次のようInsertItemTemplate(私は他に何も必要ありません)

<irt:FormView ID="FormViewInsertEvent" DefaultMode="Insert" runat="server" DataKeyNames="EVENT_ID" 
    DataSourceID="SqlDataSourceIocEvents">   
    <InsertItemTemplate> 
     //Some form elements (text boxes and labels etc.) which are common 

     <%if (CustomContent != null) 
      { %> 
     <hr /> 
     <asp:PlaceHolder runat="server" ID="PlaceHolderCustomContent"></asp:PlaceHolder> 
     <%} %> 

     // Link buttons with insert command 
    </InsertItemTemplate> 
</irt:FormView> 

になりました:呼び出し側(ページ)で

public partial class EventControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (CustomContent != null) 
     { 
      Control ph = FormViewInsertEvent.FindControl("PlaceHolderCustomContent");     
      CustomContent.InstantiateIn(ph); 

     } 

    } 

    [ 
    DefaultValue(null), 
    PersistenceMode(PersistenceMode.InnerProperty), 
    TemplateInstance(TemplateInstance.Single),   
    Browsable(false) 
    ] 
    public ITemplate CustomContent { 
     get; 
     set; 
    } 
} 

私が持っています(私はデータソースをUCに渡し、コードビューからFormViewのデータソースを設定していますが、問題はありません)。

問題があります。リンクボタンとポストバックをクリックすると、カスタムコンテンツ、つまりテンプレートフィールドに入れたコンテンツが消えます。

FormView.InsertItemTemplateの外側にasp:PlaceHolderを配置しても問題はありません。しかし、それは私が必要なものではありません。

ポストバック後も保持するには、InsertItemTemplate内にITemplateが必要です。私のテンプレートがPlaceHolderのコントロールリストに追加されるようですが、PreRenderとRenderの間のどこかに、これらのコントロールが削除されているようです。

アイデア?

おかげ 私は、これはいつかそう、私はクラスとプロパティを使用する属性と信じて(私は誰かを助けるための試みで、急いでこれを掲示しています)完全に解決策を覚えていない前に固定してしまったNandun

+0

これはどのように解決しましたか?私はまったく同じ問題に取り組んでいます。 Jason –

+0

こんにちは@JasonV私はこの問題を解決しましたが、私の人生は私が何をしたのか正確に覚えていません。私は、その埃の多い棚からコードを取り出し、それを通過しました、そして、私はそれが最終的に問題を解決したクラスとプロパティの属性の一部だと思います。私は答えとしてそれを入れます、それがあなたのために働く場合は答えとしてマークしてください。 – Nandun

答えて

0

下記を参照して問題を修正してください。

Irt.Web.ServerControls.PlaceHolderは、単にSystem.Web.UI.WebControls.PlaceHolderコントロールから派生したクラスであることに注意してください。これで問題が解決された場合は、これをマークしてください。

[PersistChildren(true)] 
public partial class EventControl : UserControl 
{ 

    protected override void OnInit(EventArgs e) 
    { 
     if (CustomContent != null) 
     { 
      CustomContent.InstantiateIn(PlaceHolderCustomContent); 
     } 
     base.OnInit(e); 
    } 

    public string ComponentLabel { get; set; } 

    public string ComponentValue { get; set; } 


    [DefaultValue(null)] 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    [TemplateContainer(typeof(Irt.Web.ServerControls.PlaceHolder), System.ComponentModel.BindingDirection.TwoWay)] 
    [TemplateInstance(TemplateInstance.Single)] 
    [Browsable(false)] 
    [Bindable(true, BindingDirection.TwoWay)] 
    public ITemplate CustomContent 
    { 
     get; 
     set; 
    } 

} 
関連する問題