#c# #asp.net-core #asp.net-core-mvc #asp.net-core-viewcomponent
#c# #asp.net-core #asp.net-core-mvc #asp.net-core-viewcomponent
Вопрос:
Исключение InvalidOperationException: не удалось найти компонент представления с именем ‘../../Shared/Component’. Компонент представления должен быть общедоступным неабстрактным классом, не содержать каких-либо общих параметров и либо иметь ‘ViewComponentAttribute’, либо иметь имя класса, заканчивающееся суффиксом ‘ViewComponent’. Компонент представления не должен быть украшен ‘NonViewComponentAttribute’.
@model ShopApp.WEBUI.ViewModels.ProductViewModel
@{
var popularClass = Model.Products.Count > 2 ? "popular" : "";
var products = Model.Products;
var categories = Model.Categories;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3 Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<style>
body {
margin: 0;
padding: 0;
}
main {
display: inline;
}
.popular {
color: orangered;
}
</style>
</head>
<body>
@await Html.PartialAsync(@"../../shared/_navbar")
@await Html.PartialAsync(@"../../shared/_header");
<main>
<div class="container">
<div class="row">
<div class="col-md-4">
@await Component.InvokeAsync(@"../../Shared/Component",categories)
</div>
<div class="col-md-8">
@if (products.Count == 0)
{
@await Html.PartialAsync(@"../../shared/_NoProduc");
}
else
{
<div class="row">
@foreach (var product in products)
{
<div class="col-md-2">
@await Html.PartialAsync(@"../../shared/_product", product)
</div>
}
</div>
}
</div>
</div>
</div>
</main>
</body>
</html>
Комментарии:
1.
Component.InvokeAsync
ищет имя вашего компонента просмотра, а не путь
Ответ №1:
Измените имя папки компонента на Components, а затем создайте в ней папку с именем Categories, а затем поместите в нее Default.cshtml.
вызовите вот так
@await Component.InvokeAsync("Categories", new { place your parameters here })
CategoriesViewComponent должен быть загружен из ViewComponent
ваши параметры должны быть объявлены в методе InvokeAsynk класса CategoriesViewComponent и использовать его с его именем, где вы хотите вызвать этот компонент: new { parameter1 = «value» }