Asp.net mvc 如何将部分razor页面加载到razor视图中

Asp.net mvc 如何将部分razor页面加载到razor视图中,asp.net-mvc,razor,asp.net-core-mvc,asp.net-core-2.0,razor-pages,Asp.net Mvc,Razor,Asp.net Core Mvc,Asp.net Core 2.0,Razor Pages,我试图用razor页面替换我的视图组件,但似乎不可能加载部分razor页面,因为预期会传递一个模型,但据我所知,razor页面的模型应该在OnGetAsync方法中声明。这是我的密码 剃须刀页面 @page "{id:int}" @model _BackgroundModel <form method="POST"> <div>Name: <input asp-for="Description" /></div> <inpu

我试图用razor页面替换我的视图组件,但似乎不可能加载部分razor页面,因为预期会传递一个模型,但据我所知,razor页面的模型应该在OnGetAsync方法中声明。这是我的密码

剃须刀页面

@page "{id:int}"
@model _BackgroundModel

<form method="POST">
    <div>Name: <input asp-for="Description" /></div>
    <input type="submit" />
</form>
剃须刀视图

<div class="tab-pane fade" id="client-background-tab">
    <div class="row">
        <div class="col-sm-12">
            @await Html.PartialAsync("/Pages/Client/_Background.cshtml", new { id = 1 })
        </div>
    </div>
</div>

@等待Html.partialsync(“/Pages/Client/_Background.cshtml”,新的{id=1})
页面加载错误

InvalidOperationException:传递到 ViewDataDictionary的类型为“f_uuAnonymousType0`1[System.Int32]”, 但此ViewDataDictionary实例需要类型为的模型项 'WebApp.Pages.Client.\u BackgroundModel'

在本例中(根据MS在其文档中推荐的方法),模型设置在OnGetAsync方法中,该方法应在请求页面时运行。我还尝试了@await Html.RenderPartialAsync(“/Pages/Client/_Background.cshtml”,new{id=1}),但结果相同


如何将razor页面加载到现有视图中?

Microsoft确认这无法实现,因此razor页面不能用作视图组件的替代品

查看他们文档的注释

@RickAndMSFT主持人15小时前 @OjM您可以重定向到页面,或者您可以将核心视图>代码转换为一个部分,并从两者调用它

页面不能替代部分或视图组件


您的视图模型是
\u BackgroundModel
,但您使用
int
值调用视图。尝试一些类似于
@await Html.partialSync(“/Pages/Client/\u Background.cshtml”,new\u BackgroundModel())
@Azim的方法。模型应该在调用视图未传递的代码隐藏文件中的
OnGetAsync
中创建。页面加载需要一个在razor页面顶部定义的int值
@page“{id:int}”
,该int值被传递给
OnGetAsync(int-id)
当页面加载时,这就是为什么我要从调用视图而不是模型传递int值。如果要将模型传递给部分视图,那么为什么需要将“id”传递给it@Saineshwar这就是剃须刀页面的工作原理。它们本质上在代码隐藏文件中有自己的控制器,因此不需要或不期望传递模型。这与使用
@await Component.InvokeAsync(“name”)
调用的视图组件的概念相同。我一直在寻找一种方法,以类似的方式加载剃须刀页面,但似乎这是不可能的,根据MS docs评论中的回复
<div class="tab-pane fade" id="client-background-tab">
    <div class="row">
        <div class="col-sm-12">
            @await Html.PartialAsync("/Pages/Client/_Background.cshtml", new { id = 1 })
        </div>
    </div>
</div>