ITemplate внутри FormView.InsertItemTemlate исчезает после обратной передачи

У меня есть UserControl, в котором у меня есть FormView.

В представлении формы есть только 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>     

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

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

Мне нужно, чтобы ITemplate внутри InsertItemTemplate сохранялся даже после обратных передач. Похоже, что мой шаблон добавляется в список элементов управления PlaceHolder, но где-то между PreRender и Render эти элементы управления удаляются.

Есть идеи?

Спасибо, Нандун.


person Nandun    schedule 09.05.2012    source источник
comment
Вы решили это и как? Я сталкиваюсь с той же проблемой. Джейсон   -  person Jason V    schedule 06.05.2013
comment
Привет @JasonV, я исправил эту проблему, но на всю жизнь не могу точно вспомнить, что я сделал. я вытащил код с его пыльной полки и просмотрел его, и я думаю, что это были некоторые из атрибутов класса и свойства, которые, наконец, решили проблему. Я добавлю это как ответ, если это сработает для вас, отметьте это как ответ.   -  person Nandun    schedule 07.05.2013


Ответы (1)


Я исправил это некоторое время назад, поэтому я не помню полностью решение (я публикую это в спешке, пытаясь помочь кому-то), я считаю, что атрибуты класса и свойства, которые вы видите ниже, исправили проблему.

Обратите внимание, что 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; 
    }

}
person Nandun    schedule 06.05.2013