ASP .Net Core剃刀:无法从我的PageModel

时间:2018-10-24 16:51:04

标签: razor asp.net-core

我试图使用Ajax在我的Razor页面中调用一个处理程序,该处理程序返回ViewComponent的结果,但是当我尝试下面的代码时,它说:

  

不可使用的成员“ ViewComponent”不能像方法一样使用。

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

1 个答案:

答案 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,它将把它解析为扩展方法,而不是尝试将构造函数作为方法来调用。

如果只使用一次 ,则可以放弃扩展方法,只需将代码本身嵌入处理程序中即可。这完全取决于您-某些人可能更喜欢将扩展方法用于整个“关注分离”参数。