如何将 RazorPage(PageModel)渲染为 Html 或如何嵌套 Razor 页面

问题描述 投票:0回答:1

听起来很奇怪,是否可以将 Razor Page(PageModel 派生类)渲染为 Html?

为了让您了解为什么我需要这个,我正在寻找尝试嵌套 Razor Pages 的方法。

例如,如果我有一个 ParentModel : PageModel 和一个 ChildModel: PageModel,我希望能够以某种方式将 Child.cshtml 放入 Parent.cshtml 中。

因此,为此,我首先探索如何将 ChildModel 渲染为部分视图的想法。

asp.net-core razor-pages
1个回答
0
投票

根据您的描述,我认为视图组件是比部分视图更好的选择。

来自文档

视图组件与分部视图类似,但功能更强大。视图组件不使用模型绑定,它们依赖于调用视图组件时传递的数据。

它还支持viewbag并支持将服务注入其中,这与普通的razor页面更相似。

更详细的使用方法,可以参考这个例子:

少儿班:

public class ChildModel
{
    public int Id { get; set; }
}

组件类:

public class ChildViewComponent : ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync(string someParameter)
    {
        var model = new ChildModel { Id = 1 };
        return View(model);
    }
}

创建如下路径的视图:

请注意:视图组件视图路径需要匹配如下:

/Views/{Controller Name}/Components/{View Component Name}/{View Name}
/Views/Shared/Components/{View Component Name}/{View Name}
/Pages/Shared/Components/{View Component Name}/{View Name}
/Areas/{Area Name}/Views/Shared/Components/{View Component Name}/{View Name}

所以你需要按如下方式创建它:

Views/Shared/Components/Child/Default.cshtml

查看:

@model ChildModel

<div>
    <!-- Child content goes here -->
    <h2>@Model.Id</h2>
</div>

父页面内部使用:

@await Component.InvokeAsync("Child", new ChildModel { Id = 1 })
© www.soinside.com 2019 - 2024. All rights reserved.