2010-02-22 2 views
9

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

ответ

7

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

Если это действительно ваша проблема, то очистка viewstate не является подходящим действием. Это довольно просто исправить, проверить эти три ссылки:

http://msdn.microsoft.com/en-us/library/ms972976.aspx

http://www.4guysfromrolla.com/articles/092904-1.aspx

http://geekswithblogs.net/shahed/archive/2008/06/26/123391.aspx

+0

Как аддон: убедитесь, что вы создали свои элементы управления как можно раньше и никогда не после 'Page_Load' , 'Page_Init' является предпочтительным, но событие' Page_Load' будет работать. 'Page_PreRender' будет ** не ** – Earlz

+0

Я добавляю элементы управления пользователя для определенных событий. Элементы управления пользователя содержат модальный код, который предоставляется пользователю. Нельзя загружать все пользовательские элементы управления на page_load, потому что каждый из них загружен тяжело, и нет необходимости получать все данные, прежде чем на самом деле знать, что пользователю это нужно. Я понимаю ответ, но должно быть решение, чтобы очистить точку зрения для таких ситуаций, как моя? – Nurp

+0

@Nurp вы должны задать новый вопрос с деталями для вашей конкретной ситуации. – slugster

0

Предполагая, что оба элемента управления наследуются от System.Web.UI.Control. Вы можете отключить их отдельные ViewStates, установив их EnableViewState на false. Также вы можете очистить ViewState, так как каждый элемент управления имеет свойство ViewState.

+0

Проблема заключается в том, что он должен будет сделать это, перегружая метод Рендере страницы, поскольку ViewState сохраняется в жизненном цикле страницы непосредственно перед тем, как Render вызывается событием SaveViewState. Любое другое событие приведет к тому, что оно все еще будет. –

+0

@Nisssan: Вы имеете в виду, если он очищает свойство ViewState, а не отключает ViewState? –

+0

Да. Если он отключит это, это нормально ... нет необходимости очищать. Но если он просто хочет его очистить, он должен будет сделать это в событии Render. В противном случае он очистит его ... но даже до того, как Render будет SaveViewState ... так что он добавит его. –

0

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

0

Вы можете отключить ViewState на определенном контроле:

EnableViewState="False" 
5

Да,

string controlName = "name of control"; 
ViewState[controlName] = null; 
// create control, add it to the page 
2

Если ViewState получает в вашем пути, и вы убежищем» t уже сделано, пожалуйста, прочитайте

TRULY understanding ViewSate

Это позволит вам гораздо удобнее работать с ViewState и целым жизненным циклом страницы ASP.NET.

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