2012-11-28 3 views
2

Я пытаюсь разработать страницу. , который имеет кнопку и место для заметок. по щелчку кнопки пользовательский элемент управления добавляется к заполнителю.ASP.NET: Как сохранить заполнитель в viewstate?

на каждый щелчок кнопки, чтобы добавить много элементов управления пользователя в местозаполнитель.

Я пытаюсь сохранить местозаполнитель в viewstate на preinit-событии, но при извлечении заполнителя из viewstate в режиме просмотра событий события остается null.

ниже мой код:

protected void PreInit(object sender, EventArgs e) 
     { 
      this.OnPreInit(e); 
      if (!Page.IsPostBack) 
      { 
       ViewState["c"] = PlaceHolder1; 

      } 
      else { PlaceHolder1 = (PlaceHolder)ViewState["c"]; } 
     } 

protected void Page_Load(object sender, EventArgs e) 
     { 

      if(IsPostBack) 
     { PlaceHolder1= (PlaceHolder)ViewState["c"]; } 

     } 


public void addDepartmentBtn_Click(object sender, EventArgs e) 
     { 
      // User Control Code 


      c1 = LoadControl("~/AddDepartment.ascx"); 
      PlaceHolder1.Controls.Add(c1); 
} 

Если ViewState не подходит в этом scenarion то, что является альтернативным способом для достижения этой цели?

+0

Сохраняясь в ViewState, вы имеете в виду элементы управления внутри заполнителя? –

+0

Существует ли управление PlaceHolder1 в разметке? – Igor

+0

@ System Down: при первом нажатии кнопки мой пользовательский элемент управления находится внутри заполнителя. Теперь я хочу хранить заполнитель в viewstate. В следующий последующий щелчок на кнопках placeholder sholud извлекается из окна просмотра, когда новые новые элементы управления добавляются к заполнителю. – Raj

ответ

1

Это не сработает. Элементы управления ASP.NET слишком сложны для хранения в ViewState. Какие средства управления сервером, с помощью проектирования ASP.NET, хранят свои данные (состояние, значения свойств и т. Д.) В ViewState страницы.

Что можно сделать, это сохранить в ViewState количество элементов управления AddDepartment, которые были созданы и добавлены в местозаполнитель. Это можно сделать в PreRender. Затем после обратной передачи вы читаете этот номер из ViewState и создаете и добавляете в placeholder, что многие элементы управления AddDepartment.

2

Если вы пытаетесь добавить элементы управления на страницу динамически, это должно быть сделано в Init на каждой обратной передаче. Это означает, что вы должны использовать структуру данных (что-то, что сохраняется в ViewState) в качестве списка динамически созданных элементов управления - НЕ сами элементы управления, но хэш строк для использования в качестве идентификаторов является распространенным методом.

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

2

Вы должны повторно добавить элементы управления к своему владельцу места на каждом столбе.

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