Способы совместного использования общих функций между несколькими страницами в ASP.NET - PullRequest
2 голосов
/ 22 декабря 2011

Возможно, это очень слабый вопрос, и мне не хватает знаний о ASP.Net.В этом случае будет приветствоваться ссылка на статью с объяснением.

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

private void PermissionCheck()
{
    if (null == Session["UserID"] ||
        null == Session["ProjectID"] ||
        null == Session["AssetID"] ||
        null == Session["ProjectName"])
    {
        Response.Redirect("~/Login.aspx");
    }
 }

будет одинаковым на 2 страницах.Некоторые другие вещи такие же.Я хотел бы поместить это в общий базовый класс.Но есть и другие функции, которые вообще не относятся к страницам:

private string GetAttachmentTempPath()
{
    return Request.PhysicalApplicationPath + WebConfigurationManager.AppSettings.Get("AttachmentsTempFolder");
}

Я бы хотел переместить это в класс Attachment, но чтобы получить физический путь к приложению, мне нужнопередать объект Request в этот метод, что не очень приятно, так как он соединяет Attachment класс с Page.Request объектом.

Есть ли способ переместить эти функции куда-нибудь еще без необходимости передавать Page.Request объекты вокруг ??

ps Приложение огромно, и нет возможности изменить всю архитектуру.

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

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

HttpContext

будет удобен, поскольку вы можете получить доступ ко многим объектам ASP.Net через статические члены через этот класс. HttpConext @ MSDN

2 голосов
/ 22 декабря 2011

Для вашего разрешения вы можете создать класс базовой страницы:

class BasePage : Page
{ 
   ...
   protected override OnInit() {
     // do check here
   }
}

Теперь вы можете реализовать свою страницу следующим образом class MyOtherPage : BasePage { ... } OnInit запускается каждый раз, когда загружается ваш MyOtherPage.

Вы можете увидеть полный жизненный цикл страницы здесь: Ссылка

Для вашей другой проблемы: рассмотрите возможность реализации глобального доступного статического класса инструмента

Обновление

Хорошим подходом для облегчения доступа к таким вещам, как web.config, является Singleton. В asp.net синглтон создается только один раз и живет до тех пор, пока не остановится рабочий процесс asp. Таким образом, эти значения являются общими для всего приложения asp.net. Это также хорошо для хранения данных в глобальном контексте, который вы не хотите выводить из вашей базы данных или файла каждый раз, когда пользователь делает запрос страницы (например, номер версии или тому подобное)

Обновление 2

Чтобы получить доступ к запросу, не передавая его каждой функции, используйте это:

HttpContext.Current.Request
1 голос
/ 22 декабря 2011

Если у вас есть похожие функции за страницей, вы можете использовать ASP.NET WEB User Control .

Вы можете создавать функции в пользовательском контроле и использовать элемент управления на страницах,необходимо.

Посмотрите эту статью о Веб-контроль пользователя в Asp.Net

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