главные страницы, страницы форм, форма runat = server ›все методы onclick на главной странице?

проблема в том, что у меня есть несколько вложенных главных страниц:

  • уровень 1: глобальный (верхний колонтитул, нижний колонтитул, вход, навигация и т. д.)
  • уровень 2: специфический (страницы поиска, страницы аккаунта и т. д.)
  • уровень 3: сама страница.

теперь, поскольку только одна форма может иметь runat=server, я помещаю форму на глобальную страницу (чтобы я мог обрабатывать такие вещи, как вход в систему, обратная связь и т. д.).

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

есть ли способ делегировать такие методы из событий onclick (например: ChangeEMail) с уровня 1 (глобальная главная страница) на уровень 3 (сама отдельная страница).

чтобы быть еще более ясным: я хочу НЕ иметь метод ChangeEMail в коде глобальной главной страницы, но хотел бы каким-то образом «ПЕРЕМЕСТИТЬ» его на единственную страницу, которая будет его фактически использовать. причина, по которой он в настоящее время должен быть на глобальном мастере, заключается в том, что глобальный мастер имеет form runat=server, и на каждую страницу aspx может быть только один из них.

так будет проще (логичнее) структурировать код.

спасибо (надеюсь, я правильно объяснил)

выполнили поиск, но не нашли общей информации по работе с этим случаем, обычно ответ таков: есть все методы на главной странице, но мне это не нравится. так что ЛЮБОЙ способ переместить его на конкретную страницу был бы потрясающим. спасибо

редактировать тоже является частью того же ... с другой стороны - как получить доступ к textbox1.text, например, на странице содержания с главной страницы? какая-нибудь лучшая практика для этого?


person b0x0rz    schedule 22.05.2010    source источник


Ответы (1)


Если вы поместите кнопку «Поиск» и текстовое поле на самом .aspx (уровень 3), обработчик событий также войдет на страницу (или ее код). Не имеет значения, что тег формы находится на глобальной главной странице (уровень 1).

Что касается вашего второго вопроса: вы можете использовать

var tb = this.FindControl("textbox1") as TextBox;
person Arjan Einbu    schedule 22.05.2010
comment
проверка №1. для №2, строгая типизация недоступна? это кажется сделанным для нулевого указателя, когда кто-то меняет имя? - person b0x0rz; 23.05.2010
comment
для № 1: я делаю это: ‹asp: LinkButton ID = SignInLinkButton runat = server CssClass = SignInLinkButton TabIndex = 3 OnClick = AuthorizeUser› SignIn ‹/ asp: LinkButton› и код: void AuthorizeUser (отправитель объекта, EventArgs e) { [...]}, но появляется сообщение об ошибке: CS1061: «ASP.manage_signin_default_aspx» не содержит определения для «AuthorizeUser» и не может быть найден метод расширения «AuthorizeUser», принимающий первый аргумент типа «ASP.manage_signin_default_aspx» (являются вам не хватает директивы using или ссылки на сборку?) - person b0x0rz; 23.05.2010
comment
вот почему я подумал, что это не работает на странице «уровня 3». не уверен, что не так ... - person b0x0rz; 23.05.2010
comment
ай ок, понял - надо сделать метод ПУБЛИЧНЫМ! тогда это работает. - person b0x0rz; 23.05.2010
comment
это также делает вторую часть не столь важной. спасибо большое за помощь :) - person b0x0rz; 23.05.2010