Объявление поля имени пользователя как личного или защищенного не имеет отношения к этой ситуации. Единственный защищенный / приватный объект - это доступность переменной вне класса или унаследованных членов.
Я полагаю, что это проблема жизненного цикла.
Когда вы переходите на эту страницу в первый раз, имя пользователя будет иметь значение только в том случае, если для запроса была задана строка запроса. Таким образом, «/TeacherControlPanel.aspx» будет иметь имя пользователя без значения, но «/TeacherControlPanel.aspx?username=SomeUserName». В этих случаях поле username будет иметь значение, только если оно установлено. И если строка запроса не установлена, то когда страница обрабатывает событие нажатия кнопки, загрузка сработает, не заданная строка запроса означает, что имя пользователя будет нулевым, что означает, что событию click нечего добавить к строке перенаправления.
Таким образом, вопрос в вашем приложении, какой путь навигации вы используете для доступа к TeacherControlPanel.aspx?