При использовании 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
, который будетразрешите его в метод расширения, вместо того, чтобы пытаться вызвать конструктор как метод.
Если вы собираетесь использовать этот только один раз , вы можете отказаться от метода расширения и просто встроитьсам код внутри вашего обработчика.Это зависит только от вас - некоторые люди могут предпочесть метод расширения для всего аргумента разделения проблем.