Как добавить функцию, к которой могут получить доступ все страницы Razor? - PullRequest
1 голос
/ 11 февраля 2020

Использование Razor Pages ASP. Net Ядро, у меня есть некоторые функции, которые я хотел бы использовать на каждой странице. Я предполагаю, что раньше это делали с App_Code, но это больше не работает в Core. Как я могу выполнить sh в Asp. Net Core Razor Pages?

1 Ответ

5 голосов
/ 11 февраля 2020

Опция 1 - DI

1 - Создать класс обслуживания с соответствующей функциональностью

public class FullNameService
{
    public string GetFullName(string first, string last)
    {
        return $"{first} {last}";
    }
}

2 - Зарегистрировать службу при запуске

services.AddTransient<FullNameService>();

3- Вставить его на страницу бритвы

public class IndexModel : PageModel
{
    private readonly FullNameService _service;

    public IndexModel(FullNameService service)
    {
        _service = service;
    }

    public string OnGet(string name, string lastName)
    {
        return _service.GetFullName(name, lastName);
    }
}

Вариант 2 - Базовая модель

1- Создать модель базовой страницы с помощью функции

public class BasePageModel : PageModel
{
    public string GetFullName(string first, string lastName)
    {
        return $"{first} {lastName}";
    }
}

2- Извлечь другие страницы из базовой модели

public class IndexModel : BasePageModel
{
    public string OnGet(string first, string lastName)
    {
        return GetFullName(first, lastName);
    }
}

Вариант 3 - Stati c Класс

1- Использовать данные * Функция 1044 *, доступ к которой можно получить со всех страниц

public static class FullNameBuilder
{
    public static string GetFullName(string first, string lastName)
    {
        return $"{first} {lastName}";
    }
}

2 - вызов функции stati c со страницы бритвы

public class IndexModel : PageModel
{
    public string OnGet(string first, string lastName)
    {
        return FullNameBuilder.GetFullName(first, lastName);
    }
}

опция 4 - методы расширения

1 - Создать метод расширения для определенного типа c объектов (например, строки)

public static class FullNameExtensions
{
    public static string GetFullName(this string first, string lastName)
    {
        return $"{first} {lastName}";
    }
}

2 - Вызовить расширение со страницы бритвы

public class IndexModel : PageModel
{
    public string OnGet(string first, string lastName)
    {
        return first.GetFullName(lastName);
    }
}
...