2012-03-03 3 views
0

У меня есть мастер создания ASP.Net. Одним из дополнительных шагов, которые я включил, является сбор контактной информации для соединений, которые могут возникнуть у клиента для коллег-сотрудников, поэтому настраиваемая учетная запись может также создавать логины для них. Пользователь, который я использую для ContactPerson, состоит из нескольких текстовых полей для ключевой информации (Name, DoB, Company Name, Address и State).Советы: Постоянный пользовательский ввод для динамически созданных пользовательских элементов управления

Я использую простую кнопку для вызова метода AddContacts, который создает правильную структуру вложенности, используемую для RadPanelItems. Как только я добавляю первый элемент, он работает нормально, второй, хотя и вытирает первый с помощью обратной передачи и не сохраняет постоянство данных.

Этот пользовательский элемент управления сопоставляется с EF4 Entity, в частности на странице есть член, называемый ListListList. Я хотел спросить, что было бы лучшим способом сохранить мои данные Entity, собранные мной из предыдущего контакта, и повторное добавление моего пользовательского элемента управления (с указанными данными) обратно в форму, когда встречается столбец назад?

Я открыт для предложений, и я ищу оптимальное решение (ы). Заранее спасибо.

ответ

2

Пока вы не сохраните данные, вы можете использовать HttpContext.Current. Сессия Объект для хранения информации. Сессия (хранящаяся на сервере) лучше для больших данных, ViewState (хранится в скрытом поле на странице) может использоваться для небольших данных, поскольку он отправляется туда и обратно каждый запрос и быстро взрывает размер страницы , Для обсуждения см ViewState Vs Session ... maintaining object through page lifecycle или http://msdn.microsoft.com/en-us/library/ms972976.aspx

Annother вариант (не хороший для вашей ситуации) является QueryParameters для очень маленьких данных, таких как идентификаторы или первичных ключей, имеющих преимущество, что вы можете копировать вставить URL в электронной почте и по-прежнему имеют информация. см. http://www.codeproject.com/Articles/5876/Passing-variables-between-pages-using-QueryString

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

var contacts = new List<EF4Entity>() 
if (Session["Contacts"] != null){ 
    contacts = Session["Contacts"] as List<EF4Entity> 
} 

var newContact = new EF4Entity() 
//fill your new contact here 
contacts.Add(newContact) 

//bind your RadPanelItems here 

//store it to the session 
Session["Contacts"] = contacts 
+1

Поскольку мы используем состояние сеанса InProc, есть ли какие-либо непредвиденные последствия с этим подходом? Это похоже на жизнеспособный ответ, если он работает с InProc. – jjhayter

+0

Объект, хранящийся в сеансе, должен быть [Serializable], который является большинством объектов в любом случае, для некоторых пользовательских настроек требуется [Serializable], некоторые из них выполняют большую часть работы по реализации сериализации ... но давайте не будем двигаться вперед. У вас очень хороший шанс, что он будет работать нормально! InProc Session ограничен доступной памятью, настроенной в IIS. Но до тех пор, пока вы временно храните объекты и не имеете дело с 1000 пользователями, которые подписываются одновременно - я бы не стал беспокоиться об этом.Изучение SQLSession было бы альтернативой, если вам нужно больше пространства сеансов ... – Elementenfresser

0

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

Вот как я подхожу к нему.

Я написал обертку вокруг сеанса ASP.Net, чтобы убедиться, что у меня есть уникальные ключи объектов, и что я могу обеспечить максимальное количество объектов в сеансе на пользователя. Каждый из моих страниц привязывается к объекту, который реализует простой интерфейс (я называю его IModel). Таким образом, я могу иметь дело с моделью для каждой страницы/вида последовательно, и я могу сделать любую информацию о состоянии страницы.

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

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