Я не проверял это, но очистка viewstate для usercontrol может работать. Вы также можете предоставить пользовательский метод для пользовательского элемента управления:
UserControl:
public void Clear()
{
this.ViewState.Clear();
}
страница:
myUserControlInstance.Clear();
Теперь снова я не проверял. Возможно, это только очистит StateBag
для контейнера UserControl, а не его вложенных / дочерних элементов управления. Если вышеприведенное не сработает, вы можете попробовать использовать рекурсию, чтобы пройтись по дереву элементов управления для очистки представления состояния для всех дочерних элементов: 1010 *
UserControl:
public void Clear()
{
ClearViewState(this.Controls);
}
private void ClearViewState(ControlCollection cc)
{
foreach(Control c in cc)
{
if(c.HasControls())
{
//clear the child controls first
ClearViewState(c.Controls);
}
//then clear the control itself
c.ViewState.Clear();
}
}
страница:
myUserControlInstance.Clear();
Просто идея. Я не проверял это, но я думаю, что теоретически это могло бы работать. Одним из следствий этого будет вызов Clear в правильной точке жизненного цикла страницы / элементов управления, иначе это может не сработать.
Надеюсь, это поможет!