Хотя официальный документ не содержит описания того, как настраивать расположение компонентов представления, вы все равно можете следовать этим учебникам о том, как это сделать с простыми файлами View.
Короче говоря:
- Вам нужно настроить
RazorViewEngineOptions
параметры, чтобы сообщить Razor, где находятся файлы вашего просмотра - Кроме того, вам нужно создать папку
Components/YourViewComponentName/
, чтобы сообщить Razor, что этогде располагаются ваши компоненты представления.
Как это сделать подробно
Предположим, вы хотите создать компонент представления, который бы отображал разные файлы представления разных тем:
public class MyViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync( string template, string theme)
{
template = string.IsNullOrEmpty(template) ? "Default": template;
theme = string.IsNullOrEmpty(theme) ? "" : "." +theme;
return View(template+theme);
}
}
Вы можете поместить этот файл куда угодно.В целях тестирования я создаю папку, как показано ниже:
Your project folder/
App.csproj
MyLocations/
MyViewComponent.cs # MyViewComponent class
DefaultTheme/
Components/ # The name of `Components` here matters
My/ # Your ViewComponentName
Default.cshtml # view file of your view component
Another.cshtml # view file of your view component
Theme2/
Components/ # The name of `Components` here matters
My/ # Your ViewComponentName
Default.Theme2.cshtml # view file of your view component
Another.Theme2.cshtml # view file of your view component
Views/
Controllers/
Обратите внимание, что имя папки My
должно соответствовать имени компонента представления.Если вы задаете имя Our
, имя папки также следует изменить.
Чтобы оно работало, просто добавьте конфигурацию для RazorViewEngineOptions
:
services.Configure<RazorViewEngineOptions>(o =>{
o.ViewLocationFormats.Add("MyLocations/DefaultTheme/{0}" + RazorViewEngine.ViewExtension);
o.ViewLocationFormats.Add("MyLocations/Theme2/{0}" + RazorViewEngine.ViewExtension);
});
Вот и все.