ASP .Net Core Razor: Невозможно вернуть ViewComponent из моей PageModel - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь использовать Ajax для вызова обработчика на моей странице Razor, который возвращает результат ViewComponent, однако, когда я пробую приведенный ниже код, он говорит:

Невозвратный элемент "ViewComponent "нельзя использовать как метод.

public IActionResult OnGetPriceist()
{
    return ViewComponent("PriceList", new { id= 5 });
}

1 Ответ

0 голосов
/ 24 октября 2018

При использовании MVC базовый класс Controller включает ViewComponent метод , который является просто вспомогательным методом, который создает для вас ViewComponentResult.Этот метод еще не существует в мире Razor Pages, где вместо этого вы используете PageModel в качестве базового класса.

Один из способов обойти это - создать метод расширения для класса PageModel, которыйбудет выглядеть примерно так:

public static class PageModelExtensions
{
    public static ViewComponentResult ViewComponent(this PageModel pageModel, string componentName, object arguments)
    {
        return new ViewComponentResult
        {
            ViewComponentName = componentName,
            Arguments = arguments,
            ViewData = pageModel.ViewData,
            TempData = pageModel.TempData
        };
    }
}

Помимо того, что это метод расширения, приведенный выше код просто вырван из Controller.Чтобы использовать его, вы можете вызвать его из вашего существующего метода OnGetPriceList (опечатка исправлена), например:

public IActionResult OnGetPriceList()
{
    return this.ViewComponent("PriceList", new { id = 5 });
}

Ключом к тому, чтобы заставить его работать здесь, является использование this, который будетразрешите его в метод расширения, вместо того, чтобы пытаться вызвать конструктор как метод.

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

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