ASP.Net и GetType () - PullRequest
       12

ASP.Net и GetType ()

6 голосов
/ 14 октября 2008

Я хочу получить тип объекта "BasePage", который я создаю. Каждый объект Page основан на BasePage. Например, у меня есть Login.aspx и в моем коде позади и класс, который имеет метод Display:

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(page.GetType());
}

В моей структуре проекта у меня есть файл ресурсов по умолчанию и файл ресурсов псевдо-перевода. Если я установлю, попробуйте что-то вроде этого:

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(typeof(Login));
}

возвращает переведенную страницу. После некоторых исследований я обнаружил, что page.GetType (). ToString () возвращал что-то с эффектом «ASP_login.aspx». Как я могу получить реальный код за типом класса, такой, чтобы я получил объект типа «Логин», который происходит от "BasePage"?

Заранее спасибо!

Ответы [ 4 ]

6 голосов
/ 14 октября 2008

Если ваш код рядом с ним выглядит так:

public partial class _Login : BasePage 
 { /* ... */ 
 }

Тогда вы получите объект Type для него с typeof(_Login). Чтобы получить тип динамически, вы можете найти его рекурсивно:

Type GetCodeBehindType()
 { return getCodeBehindTypeRecursive(this.GetType());
 }

Type getCodeBehindTypeRecursive(Type t)
 { var baseType = t.BaseType;
   if (baseType == typeof(BasePage)) return t;
   else return getCodeBehindTypeRecursive(baseType);
 }
3 голосов
/ 14 октября 2008

После некоторого дополнительного исследования я обнаружил, что если я вызываю Page.GetType (). BaseType, он возвращает тип кода кода страницы Aspx.

1 голос
/ 14 октября 2008

page.GetType (). BaseType, как было сказано ранее, но позвольте мне объяснить, почему.

Страницы Aspx наследуются от своих страниц с выделенным кодом, это означает, что иерархия наследования выглядит следующим образом:

...
Page
BasePage
Login
ASP_Login

Где верх - родитель, а низ - ребенок.

Это позволяет вашему коду быть доступным со страницы aspx, не требуя копирования всего сгенерированного кода, относящегося к вашей реальной странице aspx, на страницу базового класса.

0 голосов
/ 14 октября 2008

Это зависит от того, откуда вы вызываете Display (). Если вы вызываете его из ASPX, вы будете использовать «ASP_login.aspx». Если вы вызываете его из выделенного кода (то есть метода Page_Load ()), вы должны получить тип страницы входа в систему.

Вместо того, чтобы передавать страницу, вы можете использовать только свойство Page (то есть this.Page.GetType ()), которое всегда должно быть текущим типом страницы / кода, если я правильно помню.

Я также должен подчеркнуть, что вы могли бы рассмотреть возможность перемещения такого рода вещей из ASPX / codebehind в какое-то обслуживание. Как правило, рекомендуется минимизировать количество действий, выполняемых в коде, и вместо этого поместить логику в класс докладчика и следовать шаблону MVP для разработки веб-форм ASP.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...