2012-05-09 5 views
1

У меня есть UserControl, в котором у меня есть FormView.ITemplate внутри FormView.InsertItemTemlate исчезает после обратной передачи

Вид формы имеется только 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 из кода позади. В этом нет никаких проблем):

<irt:EventControl ID="EventControl" runat="server" DataSourceID="SqlDataSourceIocEvents"> 
    <CustomContent> 

     Custom Field: 
     <asp:TextBox ID="TextBoxCustomField" runat="server" Text='<%# Bind("CustomField") %>' /> 

    </CustomContent> 
</irt:EventControl>  

Моя проблема; когда я нажимаю кнопку ссылки и PostBack, пользовательский контент, т. е. содержимое, которое я разместил внутри поля Шаблон, исчезает.

Если я помещаю asp: PlaceHolder вне FormView.InsertItemTemplate, проблем нет. однако это не то, что мне нужно.

Мне нужна ITemplate внутри InsertItemTemplate, чтобы сохранить даже после обратной передачи. Похоже, что мой шаблон добавляется в список управления 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; 
    } 

}