听起来很奇怪,是否可以将 Razor Page(PageModel 派生类)渲染为 Html?
为了让您了解为什么我需要这个,我正在寻找尝试嵌套 Razor Pages 的方法。
例如,如果我有一个 ParentModel : PageModel 和一个 ChildModel: PageModel,我希望能够以某种方式将 Child.cshtml 放入 Parent.cshtml 中。
因此,为此,我首先探索如何将 ChildModel 渲染为部分视图的想法。
根据您的描述,我认为视图组件是比部分视图更好的选择。
来自文档:
视图组件与分部视图类似,但功能更强大。视图组件不使用模型绑定,它们依赖于调用视图组件时传递的数据。
它还支持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 })