到目前为止,我发现组件完全是经过精心设计的。
我想要的是能够将html代码块转储到页面上。以前,我要么做HtmlHelper.MyHelper()
,要么直接渲染部分。但是在核心2中,我们必须使用看起来很糟糕的组件。
因此,我在ViewComponents文件夹中创建了一个ViewComponent:
public async Task<IViewComponentResult> InvokeAsync()
{
return View("CatTable");
}
我打算在我的站点周围放置一个 lot 个唯一的表,每个表的配置都与列,排序选项,ajax等有所不同。
首先,我无法将ajax方法放入看起来很荒谬的组件中,因为该逻辑是独立的并且对于组件而言是唯一的。因此,我制作了一个名为AjaxController
的控制器,该控制器上具有方法GetCatTableData()
,以便在呈现时返回表的json。
出于某些奇怪的未知原因,组件的默认命名约定是Shared>Components>ComponentName>Default.cshtml
。这不仅麻烦,因为每个组件都必须有一个文件夹,而且名称Default.cshtml
使得打开5个Default.cshtml
文件时很难知道您在Visual Studio中正在编辑什么。
我要做的是创建一个文件夹Shared>Tables
并将所有我的表(本质上来说,我的组件是用于呈现html表的组件)放入其中。
但是,当我这样做时,视图组件似乎找不到它们。我返回了View("CatTable")
和create Shared>Tables>CatTable.cshtml
,但它在错误的位置。
即使将文件夹添加到要搜索视图的位置列表中,它仍然找不到,因为它坚持将组件名称放在路径的前面。
System.InvalidOperationException:'该视图 找不到“组件/ CatTableComponent / CatTable”。下列 搜索位置: /Views/MyController/Components/CatTableComponent/CatTable.cshtml /Views/Shared/Components/CatTableComponent/CatTable.cshtml /Pages/Shared/Components/CatTableComponent/CatTable.cshtml /Views/Shared/Tables/Components/CatTableComponent/CatTable.cshtml'
您可以看到最后一行是我将其添加为搜索文件夹的位置,它已将Components/CatTableComponent
插入路径。
有什么办法可以消除这种疯狂,只需要在表格中进行搜索?