Как применить параметр в компоненте blazor?

<MyComponent MyParameter="@MyParameter"></MyComponent>

Я хочу, чтобы тег Мой Компонент выдавал ошибку, когда для параметра Мой параметр не указано значение.

Выполните проверку на нулевое значение в разделе кода ParametersSet или OnInitialized переопределения события MyComponent, а затем выдайте ошибку, если оно равно нулю.

Bennyboy1973 09.04.2022 12:22

Послушайте, компонент .Net EditForm выдает ошибку, когда параметр модели не указан, это ошибка, которую я бы хотел иметь. <EditForm ></EditForm>

Kirk 09.04.2022 12:40
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
2
32
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Самое близкое, что вы можете получить во время компиляции, это предупреждение с EditorRequired:

[Parameter, EditorRequired]
public string MyProperty { get; set; }

Во время выполнения вы можете бросить в соответствующую точку. В override OnParametersSet() самый логичный выбор.

Обратите внимание, что <EditForm /> не показывает никаких предупреждений, потому что его контракт требует Model или EditContext. Вы не можете выразить это с помощью атрибутов (пока).

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

Оба других ответа действительны, но я бы сделал это:

    public override Task SetParametersAsync(ParameterView parameters)
    {
        parameters.SetParameterProperties(this);
        if (MyParameter == null)
            throw new InvalidOperationException($"{nameof(MyComponent)} requires a {nameof(MyParameter)} parameter.");

        return base.SetParametersAsync(ParameterView.Empty);
    }

Почему? SetParametersAsync — это метод входа, вызываемый визуализатором для компонента: код компонента не выполнялся. Если, скажем, вы поместили свой чек в OnParametersSet{Async}, возможно, вы пытались использовать его в OnInitialized{Async} — вы не сказали нам, почему он должен быть установлен!

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