powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / передача параметров в метод сервиса blazor и вызов компонентов
72 сообщений из 72, показаны все 3 страниц
передача параметров в метод сервиса blazor и вызов компонентов
    #39958313
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте! У меня приложение blazor server по типовому образцу. В нем я создал свой компонент "GoodStock, который загружает данные из базы данных используя метод сервиса, который делает выборку по параметрам. Я так же определил компонент радиобатн. Нужно , что бы по клику на этой радиобатн происходила загрузка компонента GoodStock и при этом в метод сервиса передавался параметр этой радиобатн(в данном случае "0" или "1"). Как это сделать, ведь компонент радиобатн и компонент GoodStock не являются друг к другу дочерним и родительским? Может быть мой вопрос непонятен и нужны какие то пояснения или код?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39958314
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
компонент радиобатн и компонент GoodStock не являются друг к другу дочерним и родительским?
ну значит у тебя есть какой-то родительский компонент, в котором находятся оба этих компонента.
В итоге в разметке родительского компонента ты пишешь
Код: html
1.
2.
3.
@if (_showGoodStock) {
  <GoodStock RadioValue=@_radioValue />
}



Соответственно, по клику на радиобатоне родительский компонент устанавливает своё поле _showGoodStock=true, а в компоненте GoodStock у тебя должен быть [Parameter], который примет значение радиобатона.
Как-то так
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39958315
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
GoodStock, который загружает данные из базы данных используя метод сервиса
а что касается сервиса - раз данные загружает компонент GoodStock, то ему и @inject в руки
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39958321
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Спасибо, попробую разобраться!
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39958693
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вывел в родительский компонент булеву переменную , которая меняется в зависимости от положения switch. Но теперь проблема в том, что этот компонент _mainLayout и дочка передается через @body. И что теперь делать не знаю, читаю документацию . Если кто знает- подскажите!!
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39959370
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp, Всё. Уперся в стену. Пошел angular учить.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39959399
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp,
я тоже также поступил когда разбирался с ASP MVC.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39960647
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
@code {
                [Parameter]
    public bool Gender { get; set; }
    List<ViewGoodsStocksMvc> objGoods;
    protected override async Task OnInitializedAsync()
    {
        objGoods = await Task.Run(() => objGoodStockService.GetGoods(Gender));
    }
}


Ну вот я передал параметр в дочерний компонент(из сестринского в сестринский через родительский). Но теперь в родительском компоненте я должен кликнуть радиобатн и параметр должен поменяться. Как сделать, чтобы метод сервиса выполнился с новым параметром и компонент перезагрузился?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39960746
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем нужно делать так, чтобы компонент перезагружался???

Если нужно обновить экран, есть StateHasChanged
Если нужно переинициализовать компонент - вынеси всю инициализацию в отдельный метод и вызывай его например при смене параметра (set {...})
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    protected override async Task OnInitializedAsync()
    {
        await InitAsync();
    }

    private async Task InitAsync()
    {
        objGoods = await Task.Run(() => objGoodStockService.GetGoods(Gender));
    }
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39960816
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Простите, А как вызвать метод внутри компонента при смене параметра?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39960823
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Простите, А как вызвать метод внутри компонента при смене параметра?
Через сеттер. Параметр - это обычное свойство класса, тут никакого волшебства.

Только с асинхронностью надо смотреть, что там в задаче. Если GetGoods - быстрый метод, можно просто вызвать его синхронно. Если там IO - лучше запустить задачу без ожидания, а по окончании InvokeAsync(StateHasChanged). (правда, непонятно, почему он тогда сам не является асинхронным, но это другой вопрос)
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39960829
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Shocker.Pro,
Простите, А как вызвать метод внутри компонента при смене параметра?

Вроде нашел статью про {set}
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39960832
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Вроде нашел статью про {set}
хм.... лучше прочесть учебник по основам типов в .NET и по C# в частности, а не только эту статью, а то будет непросто...
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961342
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Я учил. Честно. Поставьте тройку пожалуйста)))) Просто не сталкивался с такого рода событиями. Это мне костыль какой то напоминает. Думаю, может у меня что то в архитектуре не правильно.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961351
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем тут "такого рода события"? Это базовые основы типов в .NET, не имеющие отношения к Blazor

Я структуру твою в целом не вижу, но почему ты считаешь это костылем - не понимаю, это обычный способ применения свойств в .NET
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961366
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
У меня знания слабые. Я делаю себе приложение для магазина одежды . Десктопная часть уже готова на WF, теперь интернет магазин стряпаю потихонечку. Хочется вроде, что бы были компоненты. Индекс - родительский. Дочерние: 1-меню с радиокнопкой выбора пола. 2-карточки товаров. остальное меню категорий еще далеко впереди. Мне не нравится, что приходится 1 событие тащить через два компонента вверх и вниз. Ну да ладно. Я события не очень хорошо понимаю, привык в WF привязываться к кнопкам а суть еще предстоит постичь. Еще раз благодарю за ответы.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961371
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Я события не очень хорошо понимаю
В приведенных примерах события не используются вовсе, поэтому суть сокрушений непонятна вообще.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961412
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Понял! Вот я ступил.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961424
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
@page "/goodstock"
@using jeansBlazorAsh.Data
@using jeansBlazorAsh.Models
@inject GoodStockService objGoodStockService

<NavLink class="nav-link" href="">
    <span class="oi oi-plus" aria-hidden="true"></span>
</NavLink>
<h1>Информация о товарах</h1>
<button @onclick="OnInitializedAsync">Кнопка</button>

@if (objGoods == null)
{
    <p><em>Loading....</em></p>
}
else
{
    <div class=" col card-columns">
        @foreach (ViewGoodsStocksMvc vgs in objGoods)
        {
            <div class="card bg-light">
                <div class="card-body text-center">
                    <p class="card-text">
                        @vgs.Type
                        <span>@vgs.ManufName</span>
                        <span>@vgs.ModelName</span>
                        <span>@vgs.Widht</span>
                        <span>@vgs.LenghtId</span>
                    </p>
                    <img class="card-img-top img-fluid" src=@vgs.NomenclImagePath>
                    <div class="card-body">
                        <h4 class="card-title">@vgs.CurrentPrice</h4>
                        @if (vgs.FabricDensity != null)
                        {
                            <p class="card-text">
                                плотность &ensp;<span class="font-weight-bold">@vgs.FabricDensity</span>
                                <span>&ensp;oz</span>
                            </p>
                        }

                        <p class="card-text">@vgs.Description</p>
                        <a href="#" class="btn btn-primary">В корзину</a>
                    </div>
                </div>
            </div>
        }

    </div>
}

@code {

    public bool gender;
    [Parameter]
    public bool Gender
    {
        get
        {
            return gender;
        }
        set
        {
            gender = value;
            OnInitializedAsync();

        }
    }
    List<ViewGoodsStocksMvc> objGoods;

    protected override async Task OnInitializedAsync()
    {
        await InitAsync();
    }

    private async Task InitAsync()
    {
        objGoods = await Task.Run(() => objGoodStockService.GetGoods(Gender));
    }
}


Если я вызываю метод OnInitializedAsync() кнопкой
Код: html
1.
<button @onclick="OnInitializedAsync">Кнопка</button>

- все работает. А из сеттера пишет ошибку
'An attempt was made to use the context while it is being configured. A DbContext instance cannot be used inside OnConfiguring since it is still being configured at this point. This can happen if a second operation is started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.'
Метод GetGoods в сервисе - обычный
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public List<ViewGoodsStocksMvc> GetGoods(bool gender)
        {
            var goodList = (from good in _db.ViewGoodsStocksMvc.AsNoTracking()
                            where good.GenderM == gender
                            select good).ToList();
            return goodList;

        }

и ошибка происходит как раз в нем.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961426
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 public bool gender;
    [Parameter]
    public bool Gender
    {
        get
        {
            return gender;
        }
        set
        {
            gender = value;
            //OnInitializedAsync();
            objGoodStockService.GetGoods(gender);
            InvokeAsync(StateHasChanged);
        }
    }

jeanssp, так просто не работает. ни чего не происходит
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961447
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, естественно, ничего не будет работать. Тебе нужно получше изучить тему асинхронности в C#/.NET

Смысл в том, что ты не ожидаешь, когда у тебя завершится задача обращения к БД, а сразу пытаешься обновить компонент, естественно, ничего не происходит. Тут сразу много косяков в этом коде, ща попробую расписать
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961449
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых - не надо вызывать служебную функцию OnInitializedAsync из разметки. Я ведь специально выше написал, чтобы ты вынес инициализацию в отдельную функцию, чтобы ее можно было вызывать отдельно (честно говоря, я до этого отвечал, рассчитывая на определенную квалификацию, придется сделать скидку)

Во-вторых - в 2020-м году не надо делать синхронные методы репозитория, а потом заворачивать их в таски. EF поддерживает асинхронные методы, их и надо использовать, таким образом:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public async Task<List<ViewGoodsStocksMvc>> GetGoodsAsync(bool gender)
        {
            var goodList = await (from good in _db.ViewGoodsStocksMvc.AsNoTracking()
                            where good.GenderM == gender
                            select good).ToListAsync();
            return goodList;

        }

(кстати, тут не помешает вспомнить про сортировку....)
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961451
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3) Соответственно, вызов репозитория у тебя превращается в

Код: c#
1.
2.
3.
4.
5.
    private async Task InitAsync()
    {
        objGoods = await objGoodStockService.GetGoodsAsync(Gender);
        await InvokeAsync(StateHasChanged);
    }

то есть обновлять внешний вид компонента нужно ПОСЛЕ того, как репозиторий вернет тебе список товаров, а не ДО
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961453
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4) Параметр соответственно, должен вызывать функцию инициализации (хотя я бы её переименовал в RefreshListAsync - по её сути) без ожидания результата, чтобы не влиять на рендеринг вышестоящего компонента
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    [Parameter]
    public bool Gender
    {
        get
        {
            return gender;
        }
        set
        {
            gender = value;
            InitAsync();
        }
    }
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961454
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5) Что касается инициализации компонента - а вот тут я как раз не стал бы ожидать ответа от БД - это операция длительная. Пусть сначала будет выведено "Loading...", а когда список товаров подгрузится, то компонент обновиться и выведет список товаров. Так что можно вызвать без ожидания
Код: c#
1.
2.
3.
4.
5.
    protected override async Task OnInitializedAsync()
    {
        // запускаем без ожидания, для отзывчивости UI
        InitAsync();
    }
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961455
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
6) Что касается вот этого фрагмента кода - прочитай про @key
jeanssp
Код: c#
1.
2.
3.
        @foreach (ViewGoodsStocksMvc vgs in objGoods)
        {
            <div class="card bg-light">

https://docs.microsoft.com/ru-ru/aspnet/core/blazor/components?view=aspnetcore-3.1#use-key-to-control-the-preservation-of-elements-and-components
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961457
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7)
jeanssp
An attempt was made to use the context while it is being configured. A DbContext instance cannot be used inside OnConfiguring since it is still being configured at this point. This can happen if a second operation is started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.'
Что касается этой ошибки - не знаю, как у тебя настроено конфигурирование DbContext, в любом случае нужно ознакомиться с этим
https://docs.microsoft.com/ru-ru/aspnet/core/blazor/dependency-injection?view=aspnetcore-3.1#use-of-entity-framework-dbcontext-from-di
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961478
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще немножко добавлю на будущее, а то коллеги могут заклевать.
Неожидаемая Task-а может привести к потерянному исключению, если, к примеру, в репозитории произойдет ошибка при запросе к БД.
Тут возможны различные варианты, лично я предпочитаю последнее время перехватывать исключения и возвращать результат в виде Result<TSuccess, TError>. Это позволяет во-первых писать логику в стиле ROP, во-вторых спокойно обрабатывать исключительную ситуацию как ожидаемую.

Сейчас предлагаю, в эти подробности пока не погружаться, а разобраться с текущим вариантом, но учесть и помнить о том, что у этого компонента (как и у многих других) по-хорошему должно быть не два, а, как минимум, три состояния: Loading, Ready и LoadingError, и тут уже начинают проглядывать уши паттерна StateMachine )
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39961560
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Спасибо, уже качаю курсы.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978379
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp,
у меня получается объект objGoods содержащий отфильтрованные данные из модели
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public partial class ViewGoodsStocksMvc
    {
        public int GoodId { get; set; }
        public string Articul { get; set; }
        public string Widht { get; set; }
        public int Available { get; set; }
        public decimal CurrentPrice { get; set; }
        public string Type { get; set; }
        public string ManufName { get; set; }
        public string NomenclImagePath { get; set; }
        public int LenghtId { get; set; }
        public int TypeId { get; set; }
       
    }
}


теперь его нужно передать в дочерний компонент , но выделить из него только TypeId и сгруппировать.
Я пытаюсь сделать что то вроде этого
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 private async Task InitAsync()
    {
        objGoods = await objGoodStockService.GetGoodsAsync(radioItem);
        await InvokeAsync(StateHasChanged);


        List<int> TypeList = null;
        foreach (var t in ObjGoods)
        {
            TypeList.Add(t.TypeId);
        }
        List<int> TypeListGroup = TypeList.Distinct().ToList();
    }


Но при выполнении выскакивает ошибка. Что только не пробовал.
Ни как не могу подобрать конструкцию
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978384
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно перевести сообщение об ошибке с английского или что?
Где тот объект, к которому ты хочешь применить метод Add?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978390
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Я просто объявил переменную типа List<int > TypeList(Это объект ) и хочу в нее добавить все значения TypeId из objGood . Потом я хочу выделить из них уникальные значения для того, что бы в дочернем компоненте нарисовать чекбоксы с выбором типов. Я понимаю, что делаю что то глобально не правильно, но не пойму что.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978393
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Я просто объявил переменную типа List<int > .... и хочу в нее добавить
Нельзя ничего добавить в null
jeanssp
Код: c#
1.
List<int> TypeList = null;

...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978396
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp, Нужно , что бы при выборе группы категорий, появлялись чекбоксы с выбором более конкретных категорий . Я сейчас на этом этапе.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978424
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, List<int> typeGroup = new List<int>();
вот так вроде правильно. Работаю.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978498
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp, замучился уже
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 [Parameter]
        public List<ViewGoodsStocksMvc> ObjGood { get; set; } = null;
        //public List<int> typeGroup = new List<int>();

        public List<int> GetTypeList()
        {

            List<int> TypeList = new List<int>();
            foreach (var t in ObjGood)
            {
                TypeList.Add(t.TypeId);
            }
            List<int> TypeListGroup = TypeList.Distinct().ToList();
            return TypeListGroup;
        }


Вроде вот получился метод, а как теперь получить из него возвращаемое значение и в разметке пройтись по нему foreach не знаю . Запутался совсем
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978501
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неужели в сервис лезть ?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978669
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну у тебя же этот метод не в воздухе висит, а каком-то сервисе находится, что мешает инжектировать сервис?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978733
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, я хотел всю логику по преобразованию objGood сделать в коде страницы. Наверное это было моей ошибкой. (метод был как раз в блоке кода) Спасибо за советы.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978745
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тут для преобразования и метод-то особо не нужен, если objGood у тебя в коде страницы

Код: c#
1.
2.
3.
foreach (var typeId in ObjGood.Select(n=>n.TypeId).Distinct()) {
  ...
}
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39978746
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда, если это нужно для вывода на страницу, то чем тебе TypeId поможет, тебе же еще и имя как минимум нужно
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980473
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Да , имя нужно. То есть из objGoods нужно выделить объект типа "Type" и применить к нему Distinct(). Попробую.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980518
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
из objGoods нужно выделить объект типа "Type" и применить к нему Distinct(). Попробую.
это я просто показал как записать твой код короче и пройтись по нему foreach, в ответ на твой вопрос.
Но тебе это не поможет получить имя, зачем тебе вообще этот цикл по Id?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980593
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Да можно и без id . Я сначала хотел , что бы имя категории отображалось на экране, а id категории отправлять в метод по клику на чекбоксе. Тогда имя категории я мог бы корректировать.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980648
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 public class SelectTypesService
    {
        List<ViewGoodsStocksMvc> goodList ;
        Types type = new Types();
        List<Types> typelist= new List<Types>();
        public List<Types> GetTypes(List<ViewGoodsStocksMvc> _goodList)
        {
            goodList = _goodList;
            foreach (var t in goodList)
            {
                type.TypeId = t.TypeId;
                type.Type = t.Type;
                typelist.Add(type);
            }
            return typelist.Distinct().ToList();
        }


Сделал пока через сервис, все работает , потом попробую без него. Пока не могу сообразить как
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980654
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp,
вру . не работает . не наполняет лист. добавляет только одно значение.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980694
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем тебе здесь сервис?
Зачем ты городишь какие-то списки, какие-то коллекции из коллекций, какой-то класс, в котором будет пополняться список при каждом запросе.

Если у тебя есть на входе перечисление ViewGoodsStocksMvc, а на выходе тебе нужно получить перечисление уникальных пар (int, string) - ну так сделай это прямо в компоненте, это делается в одну строчку, что тебя мешает? Отсутствие знаний? Ну так ты вопрос задай именно так, а лучше прочти учебник - тут по коду видно, что это тебе ой как нужно. Ты сейчас теряешь дни и недели на метод тыка, вместо того, чтобы подкачать знания и применять их.
Прочти уже хотя бы про отладку, чтобы поставить точку останова и посмотреть, почему "добавляет только одно значение".
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980699
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Код: c#
1.
Types type = new Types();

нескромный вопрос, у тебя Types является структурой?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980717
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Shocker.Pro,
Код: c#
1.
2.
3.
4.
public class SelectTypesService
{
// Дайте мне это развидеть....
}


Сделал пока через сервис, все работает , потом попробую без него. Пока не могу сообразить как


Код: c#
1.
2.
3.
4.
5.
public class SelectTypesService
{
    public IEnumerable<Types> GetTypes(IEnumerable<ViewGoodsStocksMvc> goodList) =>
        goodList.Select(g => new Types { TypeId = g.TypeId, Type = g.Type });
}
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980721
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

ты забыл Distinct. TC-су надо уникальные значения Types... А тут уже зависит от того, что такое Types, реализована ли там эквивалентность... ну или просто через Aggregate() сделать.
Так что взялся - не халтурь
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980827
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
jeanssp
Код: c#
1.
Types type = new Types();

нескромный вопрос, у тебя Types является структурой?

Это класс из модели бд.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39980866
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Это класс
jeanssp
Код: c#
1.
                typelist.Add(type);

jeanssp
Код: c#
1.
typelist.Distinct()

Я ни в коем случае не хочу тебя обидеть, я пытаюсь помогать, потому что вижу, что ты стремишься к тому, чтобы что-то сделать, что-то изучить, а не просишь, чтобы всё сделали за тебя. Но тебе наверное рановато пытаться разобраться в тонкостях работы сервисов блейзора, пока нет понимания элементарных основ типов в .NET. Стоит сесть с хорошим учебником, внимательно его изучить, поделать простые примеры.

В приведенном коде ты добавляешь в список один и тот же объект несколько раз. Потом делаешь Distinct, который производит сравнение по ссылке и видит, что объект в списке у тебя только один. Тебе нужно понимать, чем отличаются классы от структур, что такое сравнение по ссылке и по значению, что такое экземпляр класса, что такое сравнение эквивалентности. Это всё - первые страницы учебника.
Мы готовы отвечать тебе на сложные вопросы, но не готовы читать вводные лекции по C#
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39982380
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Я совершенно не обижаюсь, наоборот , очень благодарен за помощь. Я хочу иметь этот инструмент(интернет магазин ) в своем распоряжении, заодно приобрести профессиональные знания, а то мало ли как жизнь повернется. При этом одновременно приходится выполнять множество текущих задач и поэтому не каждый день получается программировать. . Я изучал разные курсы.А. Шевчука смотрел, нравится сайт metanit. Хочу изучать .Net именно на себе. Написал очередной код, но он опять выдает ошибку.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
@using jeansBlazorAsh.Data
@using jeansBlazorAsh.Models
@if (ObjGoods == null)
{
    <p><em>Loading....</em></p>
}
else
{
    <div class="container-fluid">
        <div class="row">
            <div class="col">
                <nav class="navbar navbar-expand-lg navbar-light bg-light">
                   
                    <div class="container" name="unitsCheckboxDiv">
                       
                        
                        @foreach (ViewGoodsStocksMvc type in typelistgroup)
                        {
              
                            <label><input type="checkbox" value="@type.TypeId" />@type.Type</label>
                        }

                    </div>
                </nav>
            </div>
        </div>
    </div>
}


@code {


    [Parameter]
    public List<ViewGoodsStocksMvc> ObjGoods { get; set; }

    public List<ViewGoodsStocksMvc> typelistgroup = (from good in ObjGoods
                                                     select new
                                                     {
                                                         _typeID = good.TypeId,
                                                         _typeName = good.Type
                                                     }).Distinct();


    }


Компилятор подчеркивает ObjGoods и пишет A field initializer cannot reference the nonstatic field, method, or property.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39982385
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Компилятор подчеркивает ObjGoods и пишет A field initializer cannot reference the nonstatic field, method, or property.
Ну опять же, что требуется - перевести с английского сообщение об ошибке?
Нельзя использовать инициализатор, который использует свойства экземпляра (ObjGoods в данном случае).

В данном случае твоя логика вообще непонятна. Что ты хотел сказать этой инициализацией?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39982386
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
нравится сайт metanit
метанит, увы, крайне примитивен (ну он так и задуман)

Ты бы лучше прочел учебник по C#. Троелсена, например.
Shocker.Pro
Тебе нужно понимать, чем отличаются классы от структур, что такое сравнение по ссылке и по значению, что такое экземпляр класса, что такое сравнение эквивалентности. Это всё - первые страницы учебника.
Мы готовы отвечать тебе на сложные вопросы, но не готовы читать вводные лекции по C#
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39982390
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Я вообще запутался в структуре blazor. В Windows Forms все было понятно, а здесь не могу разобраться , где можно создавать метод, где нельзя, как его вызвать в блоке кода?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39982395
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторяю, ты не в структуре blazor запутался. Ты то в null пытаешься значение добавить, то один и тот же объект добавляешь в List, то пытаешься инициализировать поле чем попало. Это не про blazor и не про winforms, это про понимание базовых вещей в C# и .NET. Поэтому ты смело можешь от blazor отвлечься, дальше ты толком все равно не продвинешься. Начни с простого.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39982397
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Ладно, скачал книгу, читаю.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39984906
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно надо двигаться . хоть как то. Вот так заработало.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
@using jeansBlazorAsh.Data
@using jeansBlazorAsh.Models
@if (ObjGood == null)
{
    <p><em>Loading....</em></p>
}
else
{
<div class="container-fluid">
    <div class="row">
        <div class="col">
            <nav class="navbar navbar-expand-lg navbar-light bg-light">
                <div class="container">
                    @foreach (Types gt in GetTypes(ObjGood).Distinct<Types>())
                    {
                    <label><input type="checkbox" value=" @gt.TypeId" />@gt.Type</label>
                    }
                </div>
            </nav>
        </div>
    </div>
</div>
}
@code {
    [Parameter]
    public List<ViewGoodsStocksMvc> ObjGood { get; set; }
    public IEnumerable<Types> GetTypes(IEnumerable<ViewGoodsStocksMvc> goodList) =>
       goodList.Select(g => new Types { TypeId = g.TypeId, Type = g.Type })
        .GroupBy(x => x.Type)
        .Select(x => x.First());
}


пользователь fkthat - спасибо
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39984935
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тут Distinct()? Во-первых он тут не работает, а во-вторых и не нужен теперь.

И группировку лучше выполнять по TypeId, а не по Type
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39985243
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
А зачем тут Distinct()? Во-первых он тут не работает, а во-вторых и не нужен теперь.

И группировку лучше выполнять по TypeId, а не по Type

Это я понимаю, это у меня от прошлых экспериментов остался ненужный код.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39996106
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я наконец то написал работающий код, позволяющий делать выбор категорий и фильтровать данные при помощи "radio". Хотел сначала checkbox, но не получается привязать к нему значение value . Привязывается только true и false. (потом буду разбираться)Радио создаются динамически в цикле foreach. В компонент с этими radio передается отфильтрованный с помощью linq параметр.
Проблема в том, что при первом запуске программы, все радио выводятся неотмеченными. Мне так и надо. Потом, когда я меняю группы категорий, при новом выводе, радио уже отмечены(если перед этим я их отметил) . Мне нужно чтобы все было каждый раз как первый раз. В какую сторону копать? Жизненный цикл компонентов?
Заранее благодарю! Максимальное уважение! Александр.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #39997049
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
при первом запуске программы
оперировать таким понятием в веб приложении бессмысленно. Изучай жизненный цикл запроса, а также осознай, что пользователей (клиентов, браузеров) много, а твоя, как ты выразился "программа" - одна на всех. Если у тебя какой-то пользователь что-то делает, а другой пользователь (ты можешь открыть сайт из другого браузера или даже на другой вкладке) параллельно это видит, значит ты все сделал неправильно.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #40001125
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Всем! Почему-то не получается вывести объект в родительский компонент. При нажатии на кнопку на ребенке страница обновляется и отмеченные флажки пропадают.
Вот ребенок.
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
@page "/selectsizes"
@using jeansBlazorAsh.Data
@using jeansBlazorAsh.Models

@if (GetSize == null)
{
    <p><em>Loading....</em></p>
}
else
{

    <div class="container-fluid">
        <div class="row">
            <div class="col">
                <nav class="navbar navbar-expand-lg navbar-light bg-light">


                    <form>
                        @foreach (var ws in GetSize)
                        {
                            <label class="label-type">

                                <input type="checkbox"
                                       @onchange= "EventArgs=> { CheckboxClicked(ws.WidhtId.ToString(), EventArgs.Value); }"/>

                                @ws.Widht
                                <span class="checkmark"></span>
                            </label>
                            
                        }
                        @if (SizeIdList.Count != 0)
                        {
                            <button @onclick="@OnClick">Применить фильтр </button>
                        }
                        <div>
                            @foreach(var s in SizeIdList)
                            {
                                @s
                            }
                        </div>

                    </form>
                    
                </nav>
            </div>
        </div>
    </div>
}

@code {
    [Parameter]
    public EventCallback<List<string>> OnClickCallback { get; set; }
    void OnClick()
    {
        OnClickCallback.InvokeAsync(SizeIdList);
    }
    [Parameter]
    public IEnumerable<WidhtSizes> GetSize { get; set; }



    public List<string> SizeIdList = new List<string>();
    //public string SizeID { get; set; }
    void CheckboxClicked(string sizeID, object checkedValue)
    {

        if ((bool)checkedValue)
        {
            if (!SizeIdList.Contains(sizeID))
            {
                SizeIdList.Add(sizeID);
            }
        }
        else
        {
            if (SizeIdList.Contains(sizeID))
            {
                SizeIdList.Remove(sizeID);
            }
        }
      
    }

}


По кнопке применить фильтр, объект list<string > должен быть выведен в родитель.
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
@page "/"
@inherits LayoutComponentBase
@using jeansBlazorAsh.Pages
@using jeansBlazorAsh.Data
@using jeansBlazorAsh.Models

@inject NavigationManager NavigationManager
@inject GoodStockService objGoodStockService
<div class="container-fluid">
   mn,mn,mn,mn,mn
    <ul>
        @if (SizeIdList.Count != 0)
        {
            @foreach (var s in SizeIdList)
            {
                <li>@s</li>
            }
        }

    </ul>
</div>

@if (objGoods == null)
{
    <p><em>Loading....</em></p>
}
else
{


    <div class="container-fluid">
        <div class="row">
            <div class="col">
                <nav class="navbar navbar-expand-lg navbar-light bg-light">
                    <a class="navbar-brand" href="#">40ПАР</a>
                    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
                            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                        <span class="navbar-toggler-icon"></span>
                    </button>
                    <div class="collapse navbar-collapse" id="navbarSupportedContent">
                        <ul class="navbar-nav mr-auto">
                            <li class="nav-item active">
                                <a class="nav-link" href="#">Главная <span class="sr-only">(current)</span></a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="#">О нас</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="#">Доставка</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="#">Контакты</a>
                            </li>
                        </ul>

                        <form class="form-inline my-2 my-lg-0">
                            <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
                            <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
                        </form>

                        <ul class="navbar-nav">
                            <li class="nav-item">
                                <a href="#" class="nav-link">
                                    <i class="fas fa-shopping-cart text-dark"><span class="badge">4</span></i>
                                </a>
                            </li>
                            <li>
                                <a href="#" class="nav-link">
                                    <span>Войти</span>
                                </a>
                            </li>
                            <li>
                                <a href="#" class="nav-link">
                                    <span>Регистрация</span>
                                </a>

                            </li>
                        </ul>
                    </div>
                </nav>
            </div>
        </div>
    </div>
    <div>
        <RadioGender OnClickCallback="@CheckChanged"></RadioGender>
    </div>
    <div>
        <SelectTypes Types="@GetTypes(objGoods)" OnClCallback="@ShowSizes" />
    </div>
    <div>
        <SelectSizes GetSize="GetSize(objGoods,typeId)" OnClickCallback="@AddNewSize" />
    </div>

    <div>
        <GoodStock ObjGoods="@objGoods"></GoodStock>
    </div>
    
            
        }

@code {
    #region вызов из сервиса objGoods к-т GoodStock
    protected override async Task OnInitializedAsync()
    {
        // запускаем без ожидания, для отзывчивости UI
        await InitAsync();
    }
    IEnumerable<ViewGoodsStocksMvc> objGoods;

    private async Task InitAsync()
    {
        objGoods = await objGoodStockService.GetGoodsAsync(radioItem);
        await InvokeAsync(StateHasChanged);

    }
    #endregion
    #region для к-та группа типов RadioGender
    string radioItem = "1";
    //private string checkChanged;
    private void CheckChanged(ChangeEventArgs e)
    {
        radioItem = e.Value.ToString();
        InitAsync();
    }
    #endregion

    #region для к-та выбор типа  SelectTypes
    int typeId;
    private void ShowSizes(ChangeEventArgs e)
    {
        typeId = Convert.ToInt32(e.Value);
    }
    public IEnumerable<Types> GetTypes(IEnumerable<ViewGoodsStocksMvc> goodList) =>
  goodList.Select(g => new Types { TypeId = g.TypeId, Type = g.Type })
   .GroupBy(x => x.TypeId)
   .Select(x => x.First());
    #endregion
    #region for comp SelectSizes
    WidhtSizes _size = new WidhtSizes();
    private List<WidhtSizes> sizes = new List<WidhtSizes>();
    private void AddNewSize(WidhtSizes size)
    {
        _size = size;
        sizes.Add(_size);
    }

    public IEnumerable<WidhtSizes> GetSize(IEnumerable<ViewGoodsStocksMvc> goodList, int typeID) =>
        goodList.Where(x => x.TypeId == typeID)
        .Select(x => new WidhtSizes { WidhtId = x.WidhtId, Widht = x.Widht })
        .GroupBy(x => x.WidhtId)
        .Select(x => x.First());


    private List<string> SizeIdList = new List<string>();

    private async Task AddNewSize(List<string> sizeList)
    {
         SizeIdList =  sizeList;
       
    }
    #endregion
}


Здесь я пытаюсь вывести этот объект
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 <ul>
        @if (SizeIdList.Count != 0)
        {
            @foreach (var s in SizeIdList)
            {
                <li>@s</li>
            }
        }

    </ul>


Потом планирую применить его как фильтр.
Мне кажется результат появляется на долю секунды, а потом все пропадает.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #40001171
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял в чем дело. Дело не в коде, а в кнопке. Любая кнопка без всего обновляет страницу. Разобрался.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #40001172
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверное все-таки не любая, а кнопка типа submit внутри формы
нафига тебе в блазоре формы и сабмиты?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #40001175
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Пользователь отмечает чекбоксы с размерами одежды, появляется кнопка "применить фильтр". Надеюсь уже скоро выложу на хостинг, тогда покажу. Спасибо за ответ!
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #40001178
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не ответ на мой вопрос
вопрос - для чего тебе нужны тэги <form> и кнопки <button type="submit">
ты вообще знаешь их смысл?
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #40001206
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Смысл этих тегов. Submit отправляет данные на сервер. Разницу между form и div не очень понимаю. Понимаю, что они мне не нужны. Я их просто откуда скопировал, не помню. Я все уберу, когда буду делать нормальный фильтр.
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #40001211
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Submit отправляет данные на сервер. Разницу между form и div не очень понимаю
Понятно. Просто убери form и type="submit"
...
Рейтинг: 0 / 0
передача параметров в метод сервиса blazor и вызов компонентов
    #40007330
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возникла очередная задача. Есть объект objGoods, который является основой для карточки товаров.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
 IEnumerable<ViewGoodsStocksMvc> objGoods;

    private async Task InitAsync()
    {
        objGoods = await objGoodStockService.GetGoodsAsync(radioItem);
        await InvokeAsync(StateHasChanged);

    }


Есть компонент blazor, на котором располагаются чекбоксы , которые пользователь должен отметить , что бы выбрать категории товара.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<div class="col">
                
                    @foreach (Types gt in Types) //Types это лист категорий
                    {
                    <label class="label-type">
                        <input type="checkbox"
                               name="type1"
                               @onchange="eventArgs => { OnChange(gt.TypeId, eventArgs.Value); }">
                        @gt.Type
                        <span class="checkmark"></span>
                    </label>
                    }
                
        </div>


Чекбоксы отрисовываются динамически.
Каждый чекбокс имеет два параметра. 1 параметр-ID категории TypeId. 2 параметр-bool Value . Параметры я загоняю в коллекцию при помощи метода, привязанного к событию @onchange.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
@code {
    [Parameter]
    public IEnumerable<Types> Types { get; set; }
    [Parameter]
    public EventCallback<List<int>> OnChangeCallBack { get; set; }
    public List<int> TypeIdList = new List<int>();
    void OnChange(int typeID, object checkedValue)
    {
        if ((bool)checkedValue)
        {
            if (!TypeIdList.Contains(typeID))
            {
                TypeIdList.Add(typeID);
            }
        }
        else
        {
            if (TypeIdList.Contains(typeID))
            {
                TypeIdList.Remove(typeID);
            }
        }
        OnChangeCallBack.InvokeAsync(TypeIdList ); // Это для отправки в родительский компонент
    }

}



При помощи
Код: c#
1.
OnChangeCallBack.InvokeAsync(TypeIdList )


отправляю эту коллекцию в родительский компонент Index.
В родительском компоненте мне надо получить размеры одежды, которые принадлежат выбранным пользователем категориям. Я это делаю так.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 private void ShowSizes( List<int> TypeIdList) // Параметр метода это лист категорий 
    {
        SizeList = new List<WidhtSizes>(); // Мне надо получить лист размеров Widht это тоже самое что Size (размер джинсов)

        foreach (int typeId in TypeIdList)
        {
            IEnumerable<WidhtSizes> ws =
         objGoods.Where(x => x.TypeId == typeId)
         .Select(x => new WidhtSizes { WidhtId = x.WidhtId, Widht = x.Widht })
         .GroupBy(x => x.WidhtId)
         .Select(x => x.First());
            SizeList = SizeList.Union(ws);

        };

    }


Дальше я этот SizeList отправляю в другой дочерний компонент (SelectSize), где из него должны получиться чекбоксы с выбором размеров одежды.
Причем группировку у меня получилось сделать только в дочернем компоненте.
Код: c#
1.
2.
 sizelist.GroupBy(x => x.WidhtId) // Widht это тоже самое что Size (размер джинсов)
        .Select(x => x.First());


Все работает, но плохо. Через раз. Я чувствую , что должен быть какой то лучший способ передачи List в качестве параметра запроса Linq.
Я читал про способ с использованием интерфейса IQueryable , но реализовать его не смог.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
передача параметров в метод сервиса blazor и вызов компонентов
    #40135717
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
jeanssp
Простите, А как вызвать метод внутри компонента при смене параметра?
Через сеттер. Параметр - это обычное свойство класса, тут никакого волшебства.

Только с асинхронностью надо смотреть, что там в задаче. Если GetGoods - быстрый метод, можно просто вызвать его синхронно. Если там IO - лучше запустить задачу без ожидания, а по окончании InvokeAsync(StateHasChanged). (правда, непонятно, почему он тогда сам не является асинхронным, но это другой вопрос)


Сегодня прочитал, что нельзя так было делать. От этого приложение и зависало.
В сетер ничего пихать нельзя. Нужно использовать жизненный цикл.
...
Рейтинг: 0 / 0
72 сообщений из 72, показаны все 3 страниц
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / передача параметров в метод сервиса blazor и вызов компонентов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (9): Анонимы (6), Bing Bot, RePredeclared 1 мин., Yandex Bot 1 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]