asp.net Управление входом в систему: что не так?

Я работаю над приложением ASP.NET, и в коде С# главной страницы я хочу получить доступ к элементу управления входом в систему, поэтому у меня есть следующий код:

Login login = new Login();
login = this.Master.FindControl("login") as Login;

Но я получаю исключение "Ссылка на объект не установлена ​​​​на экземпляр объекта", когда эта строка

login = this.Master.FindControl("login") as Login;

выполняется.

Я не вижу, что может быть не так...

Спасибо.


person GoG    schedule 24.03.2011    source источник
comment
На той же мастер-странице.   -  person GoG    schedule 24.03.2011
comment
Является ли ваш контроль над входом внутри LoginView?   -  person Mike Cole    schedule 24.03.2011


Ответы (3)


Если код, упомянутый выше, находится на главной странице, попробуйте удалить основную часть кода...

Например

login = this.FindControl("login") as Login;

Причина, по которой это будет работать, заключается в том, что текущая главная страница не встроена в другую главную страницу. Таким образом, вы получите сообщение об ошибке «объект не установлен» при попытке доступа к мастер-странице (т. е. this.Master.FindControl()).

Просто интересно, если это так, есть ли причина, по которой вы не можете получить доступ к элементу управления по его имени?

person Justin Largey    schedule 24.03.2011
comment
Большое спасибо, это решило мою проблему. И на ваш вопрос - да, это тоже было странно для меня, я не мог получить доступ к элементу управления только по его идентификатору, поэтому я искал ответ в книге для .net и обнаружил, что элементы управления доступны таким образом в основные страницы... - person GoG; 24.03.2011

Если я правильно понял ваш вопрос, у вас есть эталонная страница, и вы пытаетесь использовать FindControl, чтобы найти элемент управления с именем login на этой странице. Если это так, то вы должны сделать это:

login = this.FindControl("login") as Login; 

потому что это:

login = this.Master.FindControl("login") as Login; 

будет искать элемент управления на главной странице, в которую вложена ваша текущая главная страница.

Другими словами, эта последняя строка кода будет работать, если у вас есть вложенная главная страница — например, Site.Master, а также вложенная дочерняя главная страница с именем Section.Master, ЕСЛИ элемент управления входом находится в Site.Master, а фрагмент кода были в Секции.Мастер.

(Надеюсь, это имело смысл.)

person David    schedule 24.03.2011

Вы должны иметь возможность ссылаться на элемент управления входом в систему непосредственно с помощью элемента ID.

В разметке:

<asp:Login runat="server" ID="MainLogin" ....... />

В коде:

MainLogin.Visible = false;
person Mike Cole    schedule 24.03.2011
comment
Разве вы не хотите использовать Page.Master.FindControl?? - person CrazyCoderz; 24.03.2011
comment
Зачем тебе это? Я что-то упустил здесь? - person Mike Cole; 24.03.2011
comment
К элементам управления нельзя получить доступ только по их идентификаторам в коде мастер-страницы позади класса, поэтому я использую Page.FindControl() - person GoG; 24.03.2011
comment
@Gog - ваш логин контролируется внутри LoginView? - person Mike Cole; 24.03.2011
comment
Нет, это не так... Посмотрите ответ Дэвида Стрэттона выше - там все хорошо описано, почему я не мог получить доступ к элементу управления и почему было выброшено исключение - person GoG; 24.03.2011
comment
Это не объясняет, почему вы не можете получить к нему прямой доступ вместо использования метода FindControl. - person Mike Cole; 24.03.2011