Как заставить события MudDataGrid срабатывать?

Я работаю над своим вторым сайтом MudBlazor. Это .Net 8 вместо .Net 6, с которым я работал раньше. Кроме того, я впервые работаю с DataGrid, так что будьте терпеливы в простых вопросах.

У меня есть сетка, которая показывает список элементов, как и ожидалось. Сейчас я пытаюсь настроить механизм пейджера, а также функцию поиска. Я следовал коду из их документации, но не могу заставить его выполнять какие-либо события щелчка, например переход к следующему набору записей при использовании пейджера или полное отсутствие результатов поиска. Если я наберу что-то в поле поиска, ничего не произойдет. Если я нажму на стрелку следующего набора элементов на пейджере, ничего не произойдет.

Я просмотрел свою настройку и посмотрел следующее видео. https://thewikihow.com/video_iDMqBSjjwPw

Тем не менее, я не могу заставить его работать и не вижу никаких ошибок в инструментах разработки браузера. У меня такое ощущение, что часть JavaScript не работает или ее невозможно найти.

Вот что я настроил. Если вы знаете что-то, что я могу проверить или увидеть что-то, чего не хватает, пожалуйста, дайте мне знать.

Примечание. Мне еще предстоит почистить код. Это всего лишь первый шаг к созданию веб-сайта для проверки концепции. Производство еще далеко не готово.

Приложение.razor

@using MudBlazor

<!DOCTYPE html>
<html lang = "en">

<head>
    <meta charset = "utf-8" />
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
    <base href = "/" />
    <link rel = "stylesheet" href = "bootstrap/bootstrap.min.css" />
    <link rel = "stylesheet" href = "app.css" />
    <link rel = "stylesheet" href = "SupportWeb_Blazor.styles.css" />
    <link rel = "icon" type = "image/png" href = "favicon.png" />
    <link href = "https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel = "stylesheet" />
    <link href = "_content/MudBlazor/MudBlazor.min.css" rel = "stylesheet" />
    <HeadOutlet />
</head>

<body>
    <Routes />
    <script src = "_framework/blazor.web.js"></script>
    <script src = "_content/MudBlazor/MudBlazor.min.js"></script>
</body>

</html>

Программа.cs

// Add services to the container.
builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents();
builder.Services.AddMudServices();
builder.Services.AddMudBlazorDialog();

Главная.бритва

<MudDataGrid T = "LogEntity" Items = "@listLogs" HeaderClass = "mud-table-header" SortMode = "SortMode.Single">
    <ToolBarContent>
        <MudText Typo = "Typo.h6">Application Logs</MudText>
        <MudSpacer />
        <MudTextField @bind-Value = "_searchString" Placeholder = "Search" Adornment = "Adornment.Start" Immediate = "true"
                      AdornmentIcon = "@Icons.Material.Filled.Search" IconSize = "Size.Medium" Class = "mt-0"></MudTextField>
    </ToolBarContent>
    <Columns>
        <PropertyColumn Property = "i => i.LogDate" Title = "Log DateTime" />
        <PropertyColumn Property = "i => i.Message" Sortable = "false" />
        <PropertyColumn Property = "i => i.LogType" Title = "Log Type" />
    </Columns>
    <PagerContent>
        <MudDataGridPager T = "LogEntity" />
    </PagerContent>
</MudDataGrid>

@code  {

    private readonly IConfiguration? _config = new ConfigurationBuilder().AddJsonFile("appsettings.json").AddEnvironmentVariables().Build();

    private List<LogEntity>? listLogs = new List<LogEntity>();
    private string _searchString;

    protected override async Task OnInitializedAsync()
    {
        var userAdminGroup = _config.GetValue<string>("UsersAdminGroupName");
        var storageConnection = _config.GetValue<string>("StorageConnection");
        var loggingTableName = _config.GetValue<string>("LoggingTableName");

        TableClient tableClient = new(storageConnection, loggingTableName);


        var queryResultsLINQ = tableClient.Query<LogEntity>(ent => ent.PartitionKey == "UsersAdmin");

        foreach (var item in queryResultsLINQ)
        {
            var log = new LogEntity();
            log.PartitionKey = item.PartitionKey;
            log.RowKey = item.RowKey;
            log.Timestamp = item.Timestamp;
            log.Message = item.Message;
            log.LogType = item.LogType;
            log.LogDate = ConvertLogDate(item.RowKey);
            log.LogTime = decimal.Parse(item.RowKey.Substring(9,8));

            listLogs.Add(log);
        }

        listLogs = listLogs.OrderByDescending(o => o.LogDate).ToList();

    }
Для развертывания Сайтов с использованием Blazor, Angular и React с репозиторием на GitHub на Cloudflare
Для развертывания Сайтов с использованием Blazor, Angular и React с репозиторием на GitHub на Cloudflare
Как развернуть сайты с помощью Blazor, Angular и React с репозиторием на GitHub на Cloudflare.
1
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Веб-приложения Blazor в .Net8 представили концепцию Render Modes. По умолчанию, если режим рендеринга не определен в вашем коде, он по умолчанию равен Static Server Side Rendering, и в этом случае код C# не выполняется после рендеринга страницы. Весь рендеринг изначально происходит на сервере, и никакие дальнейшие обновления через взаимодействие с пользователем невозможны (за исключением случаев использования форм отправки).

Судя по коду, который вы показали для своих App.razor и Home.razor, у вас не определен режим рендеринга. Самым простым решением было бы применить глобальный режим рендеринга в вашем App.razor, добавив режим рендеринга к тегам HeadOutlet и Routes.

<!DOCTYPE html>
<html lang = "en">

<head>
    <meta charset = "utf-8" />
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
    <base href = "/" />
    <link rel = "stylesheet" href = "bootstrap/bootstrap.min.css" />
    <link rel = "stylesheet" href = "app.css" />
    <link rel = "stylesheet" href = "SupportWeb_Blazor.styles.css" />
    <link rel = "icon" type = "image/png" href = "favicon.png" />
    <link href = "https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel = "stylesheet" />
    <link href = "_content/MudBlazor/MudBlazor.min.css" rel = "stylesheet" />
    <HeadOutlet @rendermode = "InteractiveServer"/>
</head>

<body>
    <Routes @rendermode = "InteractiveServer"/>
    <script src = "_framework/blazor.web.js"></script>
    <script src = "_content/MudBlazor/MudBlazor.min.js"></script>
</body>

</html>

Это решение применяет режим рендеринга InteractiveServer глобально к вашему решению, то есть все страницы автоматически используют режим рендеринга интерактивного сервера. В идеале вам следует прочитать о различных режимах и о том, как их можно установить (глобально, для каждой страницы, для каждого компонента) и определить, что лучше всего подходит для вас.

Смотрите здесь

Потрясающий! Вот и все. Теперь перейдем к изучению режимов рендеринга.

Caverman 21.05.2024 15:20

Другие вопросы по теме

Серверный компонент Blazor не применяет стили CSS к элементам html
Кнопки «Вперед» и «Назад» не работают, а раскрывающийся список размеров страницы в Ant Design Pagination пуст
Как я могу определить параметр общего маршрута в Blazor для автоматического использования на нескольких страницах?
Серверное приложение Blazor с проверкой подлинности Windows получает ошибку 401 неавторизованно
Blazor – как предотвратить отображение пользовательского компонента в базовом компоненте
Ошибка UserManager.GetClaimsAsync() – соединение закрыто
Ошибка при запуске приложения: действие не может использовать параметры формы и тела JSON одновременно
Как я могу одновременно использовать аутентификацию на основе токенов JWT и аутентификацию на основе файлов cookie в проекте Blazor Server с использованием .NET 8?
Кнопка MudBlazor не срабатывает
Веб-приложение .NET 8 Blazor с веб-API, использующим аутентификацию JWT