Получение URL-адреса страницы ASPX с использованием типа страницы - PullRequest
0 голосов
/ 04 января 2010

Я использую проект веб-приложения.

У меня в корневом веб-каталоге есть папка Users, а в папке - страница UserList.aspx

Что я хочу сделать, это ввести Response.Redirect (Users.UserList.URL)

Вероятно, я могу создать класс, который расширяет Page и добавить статическое свойство с именем URL, которое вызывает MethodInfo.GetCurrentMethod (). ReflectedType (я думаю, что это не проверено), а затем преобразовать пользователей. UserList -> ~ / Users / UserList.aspx

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

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

Кроме того, каждая отдельная страница, которая принимает параметры строки запроса, может иметь статический метод, так что если я захочу добавить / удалить параметры, я смогу увидеть, что использует эти параметры и т. Д. Также, если я хочу вызвать эту страницу, мне не нужно проверять название параметров, например, UserId userId, Id или id. Так что это будет выглядеть примерно как Users.ViewUser.GetUrl (1) -> ~ / Users / ViewUser.aspx? UserId = 1

Так что вопрос: есть ли лучший способ сделать это? Или это плохая идея в принципе?

Ответы [ 3 ]

0 голосов
/ 04 января 2010

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

Таким образом, ваш звонок выглядит так:

Repose.Redirect(TrafficCop["Users.UserList"].URL)

или другим способом, если вам не нравится синтаксис.

0 голосов
/ 05 января 2010

MethodInfo.GetCurrentMethod (). ReflectedType не работает, поэтому я нашел другой способ сделать это с помощью обобщений.

Вместо Users.ViewUser.GetUrl () или Users.ViewUser.URL это GetUrl () Для страницы с параметрами это все еще Users.ViewUser.GetUrl (1), это не идеально, потому что они должны иметь одинаковый способ вызова, но лучше, чем строки, я думаю.

На всякий случай оставлю вопрос открытым на некоторое время.

edidt: я думаю, что на самом деле я просто создам другой метод с именем GetUrl (String getQuery), потому что если у меня есть два параметра одного типа, он не очень хорошо работает.

дальнейшее редактирование: я узнал, как делать именно то, что я хочу делать. создал класс с именем BasePage: Page, где T: Page на что статические методы перенаправления и geturl каждая страница наследуется от базовой страницы следующим образом: MyPage: BasePage Любая страница может быть перенаправлена ​​на эту страницу с помощью команды MyPage.Redirect ();

0 голосов
/ 04 января 2010

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

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