我有一个
asp.net core 8
申请。我按照以下文档使用 ViewComponent 类来渲染视图组件:aspnetcore-8 ViewComponents。我创建了一种仅使用一个 ViewComponent 类的方法,这样我就不必每次添加新视图组件时都创建一堆 ViewComponent 类,并且还覆盖默认搜索路径。
ViewComponent代码:
using Microsoft.AspNetCore.Mvc;
namespace UI.ViewComponents
{
public class AppViewComponent : ViewComponent
{
public AppViewComponent()
{
}
public IViewComponentResult Invoke(string baseFolder, string componentName, dynamic paramData)
{
return View($"/Views/{baseFolder}/Components/{componentName}.cshtml", paramData);
}
}
}
我使用它的方式就像我的
MainView.cshtml
:
@await Component.InvokeAsync("App",
new
{
baseFolder = "Provider",
componentName = "Edit",
paramData = (Provider: Model.provider, TestData: Model.testData)
})
@await Component.InvokeAsync("App",
new
{
baseFolder = "Account",
componentName = "Edit",
paramData = (Account: Model.account)
})
在我的组件页面中,我有这样的东西,它可以完美地工作:
@model (Provider provider, string[] testData)
<input type="text" asp-for="@Model.provider.Code" class="form-control border-end-0" id="code">
这样做有什么坏处吗?我在互联网上搜索,似乎找不到有人记录这样的事情。
您的 ViewComponent 示例中的情况没有业务逻辑,我想您可以改用部分视图。如果你想这样做,所有视图组件只有一个 ViewComponent 类,你可能会遇到对所有组件使用一种逻辑的情况。
您可以查看这些以了解更多信息,希望这些可以帮助您: ASP.NET Core 中的部分视图 和 这个答案