Простое событие onchange сервера Blazor не компилируется

Итак, я хочу сделать простое и понятное событие onchange. Когда пользователь изменяет параметр в раскрывающемся списке, который не является частью какой-либо формы, я хочу, чтобы он изменил мой класс Store (который является заменой того, что вы сделали бы с React-Context).

Итак, у меня здесь есть свой компонент:

<select @onchange="OnRestaurantChanged">
    @foreach (var restaurant in _restaurantStore.State.RestaurantList)
    {
        <option value="@restaurant.Id">@restaurant.Name</option>
    }
</select >

и мой отдельный файл кода компонента здесь:

using MenuApp.Stores.Restaurant;

namespace MenuApp.Pages.Components.Restaurants
{
    public partial class RestaurantSelector : ComponentBase
    {
        [Inject]
        private IRestaurantStore _restaurantStore { get; set; }

        public string RestaurantId { get; set; }

        private void OnRestaurantChanged(ChangeEventArgs event)
        {
            _restaurantStore.ChangeSelectedRestaurant();
        }
    }
}

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

Ошибки компилятора

Если я удалю параметр события из функции, все будет скомпилировано. Но мне нужен идентификатор ресторана, на который меняет приложение, поэтому запускать слепую функцию при изменении для меня бессмысленно.

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

Как я могу получить доступ к ChangeEventArgs?


person Carlos Jimenez Bermudez    schedule 29.08.2020    source источник
comment
НЕ использовать событие как переменную, это зарезервированное слово, используйте, например, e: private void OnRestaurantChanged(ChangeEventArgs e){console.WriteLine(e.Value)}   -  person Eliseo    schedule 30.08.2020
comment
Привычки Javascript, раньше это ключевое слово не использовалось. Спасибо.   -  person Carlos Jimenez Bermudez    schedule 30.08.2020


Ответы (1)


// private void OnRestaurantChanged(ChangeEventArgs event)
   private void OnRestaurantChanged(ChangeEventArgs @event)

event - зарезервированное слово. Вы можете «спастись» от этого с помощью @. Общие правила C #, ничего общего с Razor.

person Henk Holterman    schedule 29.08.2020
comment
Привычки Javascript. К тому же я раньше не использовал ключевое слово. Спасибо. - person Carlos Jimenez Bermudez; 30.08.2020