Пока я обнаружил, что компоненты были просто ужасно разработаны.
То, что я хочу - это иметь возможность выгружать блок html на страницу. Раньше я либо делал HtmlHelper.MyHelper()
, либо даже просто визуализировал частичную часть. Но в ядре 2 мы должны использовать компоненты, которые кажутся просто ужасными.
Итак, я создал ViewComponent в своей папке ViewComponents:
public async Task<IViewComponentResult> InvokeAsync()
{
return View("CatTable");
}
Я намереваюсь иметь лот уникальных таблиц вокруг моего сайта, каждая из которых настроена немного по-разному: столбцы, параметры сортировки, ajax и т. Д.
Для начала, я не могу поместить ajax-методы в компонент, который кажется нелепым, поскольку эта логика автономна и уникальна для компонента. Поэтому я создал контроллер с именем AjaxController
, в котором есть метод GetCatTableData()
для возврата некоторого json для таблицы при рендеринге.
Соглашение о присвоении имен для компонентов по умолчанию по какой-то причудливой неизвестной причине Shared>Components>ComponentName>Default.cshtml
. Это не только грязно из-за необходимости иметь папку для каждого отдельного компонента, но имя Default.cshtml
делает очень трудным узнать, что вы редактируете в Visual Studio, когда у вас открыто 5 Default.cshtml
файлов.
Что я хочу сделать, это создать папку 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
в путь.
Есть ли способ отменить это безумие и просто найти его в таблицах?