我试图使用Ajax在我的Razor页面中调用一个处理程序,该处理程序返回ViewComponent的结果,但是当我尝试下面的代码时,它说:
不可使用的成员“ ViewComponent”不能像方法一样使用。
public IActionResult OnGetPriceist()
{
return ViewComponent("PriceList", new { id= 5 });
}
答案 0 :(得分:3)
使用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
};
}
}
除了它是扩展方法之外,上面的代码只是ripped out of Controller
。为了使用它,您可以从现有的OnGetPriceList
(固定类型错误)方法中调用它,如下所示:
public IActionResult OnGetPriceList()
{
return this.ViewComponent("PriceList", new { id = 5 });
}
在这里使其工作的关键是使用this
,它将把它解析为扩展方法,而不是尝试将构造函数作为方法来调用。
如果只使用一次 ,则可以放弃扩展方法,只需将代码本身嵌入处理程序中即可。这完全取决于您-某些人可能更喜欢将扩展方法用于整个“关注分离”参数。