Как я могу привести в порядок расположение представлений при использовании Компонентов в Core 2? - PullRequest
0 голосов
/ 11 июня 2019

Пока я обнаружил, что компоненты были просто ужасно разработаны.

То, что я хочу - это иметь возможность выгружать блок 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 в путь.

Есть ли способ отменить это безумие и просто найти его в таблицах?

...