Ошибка в asp .NET core: частичный компонент не работает

#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» }