2009-03-19 2 views
0

У меня есть составной элемент управления, связанный с данными, который содержит IBindableTemplate и динамически загружает надпись на основе некоторого состояния в элемент управления. Теперь, когда эти дочерние элементы управления загружаются в составной элемент управления, а postback там, я теряю представление о дочерних элементах управления. Есть ли способ, я могу сохранить viewstate дочерних элементов управления при обратной передаче?Как обрабатывать состояние представления дочерних элементов управления, размещенных на связующем шаблоне, в составном пользовательском элементе управления?

Я также справка. к объяснению Скотта, используя http://scottonwriting.net/sowblog/posts/2129.aspx; но бесполезно.

ответ

0

Ваш теоретический код почти рядом с моей ситуации только с одним основным отличием, что я не расширить свой шаблонный класс от IBindable как таковой, а Я предоставляю элементы управления шаблонам в самой надписи, которая является требованием.

Скотт, становится ясно, что если мы добавим элементы управления в шаблон, как вы сделали

  #region ITemplate Members 
     public void InstantiateIn(Control container) 
     { 
      Label label = new Label(); 
      label.Text = "Label"; 
      container.Controls.Add(label); 

      TextBox textbox = new TextBox(); 
      container.Controls.Add(textbox); 
     } 
     #endregion 

тогда вид состояния будет автоматически сохраняться на каждом постбэка. Все, что мне нужно, это разрешить создание шаблонов в разметке и по-прежнему сохраняться в представлении в postback и разрешить мне получать статус контроля, даже если я использовал повторное инициирование шаблона с помощью разных данных.

0

Информация не достаточна. Когда вы создаете элементы управления? Когда вы добавляете их в коллекцию Controls? Что такое условие и оно меняется при обратной передаче?

Состояние просмотра автоматически сохраняется в конце цикла страницы (обратная связь или нет) при условии, что элементы управления будут добавлены в нужное время.

Если вы добавляете элементы управления позже, в каком-то случае после завершения инициализации, то уже слишком поздно.

Update

без кода сложно догадаться, где происходит разрыв вниз. Давайте рассмотрим Repeater с настраиваемым шаблоном, который может загружать элементы управления в какое-то условие. Этот образец работает, но он не сработает, если назначение шаблона было выполнено на странице_Load. Это что-то похожее на вашу ситуацию?

Форма:

<div> 
    <asp:Repeater ID="repeater" runat="server" /> 
    <asp:Button ID="submitButton" runat="server" Text="Submit" onclick="submitButton_Click" /> 
    <asp:Button ID="postButton" runat="server" Text="PostBack" /> 
</div> 

Код:

public partial class _Default : System.Web.UI.Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     repeater.ItemTemplate = new MyTemplate(); 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     //however, if I was to move repeater.ItemTemplate = new MyTemplate() here 
     //it would not reload the view state 
     if (!IsPostBack) 
     { 
      repeater.DataSource = new int[] { 1, 2, 3, 4, 5 }; 
      repeater.DataBind(); 
     } 
    } 

    protected void submitButton_Click(object sender, EventArgs e) 
    { 
     submitButton.Text = "Do it again"; 
    } 
} 

public class MyTemplate : IBindableTemplate, INamingContainer 
{ 
    #region IBindableTemplate Members 
    public System.Collections.Specialized.IOrderedDictionary ExtractValues(Control container) 
    { 
     OrderedDictionary dictionary = new OrderedDictionary(); 
     return dictionary; 
    } 
    #endregion 

    #region ITemplate Members 
    public void InstantiateIn(Control container) 
    { 
     Label label = new Label(); 
     label.Text = "Label"; 
     container.Controls.Add(label); 

     TextBox textbox = new TextBox(); 
     container.Controls.Add(textbox); 
    } 
    #endregion 
} 
+0

Элементы управления размещены в разметке и на основе некоторой бизнес-логики, они создаются в шаблоне. Состояние просмотра не загружается, потому что при каждом обратном вызове шаблон снова создается повторно с новым набором контрольных значений, а предыдущее состояние состояния теряется. – 2009-03-20 05:24:26

+0

Я не могу сказать без кода. Я отредактировал свой ответ, чтобы проиллюстрировать теоретическую ситуацию. Я не знаю, похоже ли это на твое. – Ruslan

Смежные вопросы

 Смежные вопросы