可以将ViewComponents与Razor页面一起使用吗?

可以将ViewComponents与Razor页面一起使用吗?,razor,asp.net-core,razor-pages,asp.net-core-viewcomponent,Razor,Asp.net Core,Razor Pages,Asp.net Core Viewcomponent,我遇到了在ASP.NET Core 2.0中使用ViewComponent的一个限制 我们有一个ViewComponent,当从布局页面调用时,它的工作绝对完美。当我们从Razor页面调用相同的ViewComponent时,我们会得到以下错误 传递到ViewDataDictionary的模型项的类型为,但此ViewDataDictionary实例需要类型为的模型项 ViewComponent似乎期望传递父Razor页面的模型类型,而不是为ViewComponent定义的模型类型 我没有遇到过任何

我遇到了在ASP.NET Core 2.0中使用ViewComponent的一个限制

我们有一个ViewComponent,当从布局页面调用时,它的工作绝对完美。当我们从Razor页面调用相同的ViewComponent时,我们会得到以下错误

传递到ViewDataDictionary的模型项的类型为,但此ViewDataDictionary实例需要类型为的模型项

ViewComponent似乎期望传递父Razor页面的模型类型,而不是为ViewComponent定义的模型类型

我没有遇到过任何从Razor页面使用ViewComponent的例子,它们似乎只在布局页面(没有模型)中使用


有人能给我一个明确的是或否的问题:你能在剃须刀页面中使用ViewComponent吗?如果能,如何使用?

是的,我举了一个简单的例子,命名很搞笑

视图组件类-示例视图组件:)

最后是一个Razor页面视图,我在其中调用我的ViewComponent:

@page
@model NetCoreUI.Pages.Motorcycle.SampleModel
@{
    ViewData["Title"] = "Sample";
}

<h2>Sample</h2>

<div>
    @await Component.InvokeAsync("SampleView", new { testVm = new Models.TestVm() })
</div>
@page
@型号NetCoreUI.Pages.Motorcycle.SampleModel
@{
ViewData[“标题”]=“示例”;
}
样品
@wait Component.InvokeAsync(“SampleView”,new{testVm=newmodels.testVm()})
我选择使用一个简单的新TestVm()类来调用我的ViewComponent,但是这个类可以是SampleModel中的子集,您可以使用正确类的实例来调用视图组件—正确的类就是您的ViewComponent所引用的类


这是一个非常简单的示例,我不确定你的应用程序是如何构造的,或者可能存在不同的问题。

另外,在Iztoksson的回答中,如果你精通使用标记帮助程序,你可以在调用ViewComponent时使用它

<div>    
   <vc:SampleView testVm = "new { testVm = new Models.TestVm() }"></vc:SampleView>
</div>

是的,他们可以用同样的方法,你能发布一些代码吗?您在.cshtml文件中定义的模型是什么?您在组件的invoke方法中返回的模型是什么?我以您的示例为例,针对我自己的特定需求进行了处理,似乎一切都正常。感谢您的回复,我很感激:)您是否必须使用带有ViewComponent的模型?
namespace NetCoreUI.Pages.Motorcycle
{
    using Microsoft.AspNetCore.Mvc.RazorPages;

    public class SampleModel : PageModel
    {
        public void OnGet()
        {

        }
    }
}
@page
@model NetCoreUI.Pages.Motorcycle.SampleModel
@{
    ViewData["Title"] = "Sample";
}

<h2>Sample</h2>

<div>
    @await Component.InvokeAsync("SampleView", new { testVm = new Models.TestVm() })
</div>
<div>    
   <vc:SampleView testVm = "new { testVm = new Models.TestVm() }"></vc:SampleView>
</div>
@addTagHelper *, RazorPages