C # MultiView SetActiveView по идентификатору не работает должным образом - PullRequest
0 голосов
/ 18 апреля 2011

Я сейчас пытаюсь выяснить, что не так с моим кодом:

Не работает

if(...){  
    ...  
}else{  
    someVariableAsString = "myValue123";  
    MultiView1.SetActiveView(My3thView_ID_In_MultiViewControl);  
}

Работает

if(...){  
    ...  
}else{  
    //someVariableAsString = "myValue123";  
    MultiView1.SetActiveView(My3thView_ID_In_MultiViewControl);  
}

.. почему и какие решения для этого?

Ответы [ 3 ]

1 голос
/ 18 апреля 2011

Поскольку вы пытаетесь воздействовать на INIT, а не на загрузку, данные еще не были прикреплены к серверу.

Этот обзор жизненного цикла веб-запроса вы найдете в ASP.Полезно для сети: MSDN ASP.NET Жизненный цикл страницы

Вот соответствующий фрагмент:

Инициализация

 During page initialization, controls on the page are available and

UniqueID каждого элемента управлениясвойство установлено.Главная страница и темы также применяются к странице, если это применимо.Если текущий запрос является обратной передачей, данные обратной передачи еще не были загружены, а значения управляющих свойств не были восстановлены до значений из состояния просмотра.

 Load

 During load, if the current request is a postback, control 

свойства загружаются с информацией, восстановленной из состояния просмотра иуправляющее состояние.

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

Что-то новое, чтобы попробовать:

Попробуйте изменить не работает на:

if(...){  
    ...  
}else{  
    string someVariableAsString = "myValue123";  
    MultiView1.SetActiveView(My3thView_ID_In_MultiViewControl);  
}
0 голосов
/ 19 апреля 2011

Мне удалось найти решение для моего случая:
Я изменил someVariableAsString на Свойство как представление.
Создал переменную сеанса для Gobal.asax, и теперь я получаю правильный результат (загрузка одной страницы позже)).:-)

но в моем случае это подойдет.

Проблема решена.

onInit{  
m_myVariable;  
myFunction();  
... 
}  

void myFunction(){   
// if clause described up  
}  

public View myVariable  
{  
get { return m_myVariable = Session["myVariableAtSession"] as View; }  
set { m_myVariable = value;  
 Session["myVariableAtSession"] = m_myVariable;  
 }  
} 
0 голосов
/ 18 апреля 2011

Похоже, что someVariableAsString, возможно, выдает исключение, чтобы код не достиг следующей строки.Проверьте тип вашей переменной.

...