Blazor — FluentNumberField не работает с беззнаковыми типами

Я не могу использовать uint32, int16,... при использовании FluentNumberField.

      <FluentNumberField @bind-value="HouseDetail.Age" TValue="UInt16">Age</FluentNumberField>

Я не могу изменить тип поля на int, потому что это то, что ожидается от типа сервера Sql. Это крайне неприятно, поскольку документации по элементам управления Fluent UI не так много.

Также очень расстраивает то, что я не могу использовать отображаемое имя в качестве метки для FluentTextField и мне приходится использовать какой-то метод расширения GetDisplayName.

Я также очень расстроен тем, что привязка FluentComboBox не работает для типов перечислений.

Использование элементов управления Fluent с Blazor было крайне разочаровывающим. Я хотел использовать их со страницами Razor, но нет возможности что-либо связать. Кто-нибудь знает об этом?

На самом деле я не хочу использовать React и серьезно подумываю забыть об элементах управления Fluent до тех пор, пока они не начнут работать со страницами Blazor. Есть ли способ привязать плавные элементы управления без использования Blazor?

Информации о новых элементах управления Fluent нигде нет, и все до сих пор используют старые, которые тоже работают не очень хорошо.

Я пробовал использовать свойство TValue, но это не помогает.

1 ответ

Вам не обязательно использовать Fluent Library. Это не часто используемая библиотека компонентов.

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

Примечаниеuintиulongявляются типами, в то время какUint16.. и т. д. являются объектами.

      @page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, world!</h1>

Welcome to your new app.

<div class="bg-secondary m-3 p-3">
    <div class="mb-3">
        <input class="form-control" @bind=value />
    </div>

    <div class="bg-dark text-white p-2 mt-2">
        <div>
            Value(as uint): @value
        </div>
    </div>
</div>

@code {
    private uint? value;
}

Если вы используете элементы управления Fluent, вам необходимо подумать о конструкции конвейера данных. Из базы данных вы получаете объект Dbo. Объекты вашего домена не обязательно должны быть одинаковыми. Вы сопоставляете один объект с другим, когда перемещаете данные из своего домена данных в свой домен/основной домен.

Учти это:

Вы получаете свои данные в виде неизменяемой записи следующим образом:

      public record DboModel {
    public uint Value { get; init; }
}

Если вы хотите отредактировать эти данные, вы конвертируете их в объект Edit:

      public class EditModel
{
    private DboModel _baseRecord = new();

    public int Value { get; set; }

    public EditModel(DboModel record)
    {
        _baseRecord = record with { };
        this.Value = (int)(record.Value);
    }

    public DboModel AsRecord => new DboModel()
    {
        Value = (uint)this.Value
    };

    public bool IsDirty => _baseRecord != AsRecord;
}

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

      @page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, world!</h1>

<div class="bg-secondary m-3 p-3">
    <InputNumber class="form-control" @bind-Value=model.Value />

    <div class="bg-dark text-white p-2 m-2">
        <div>
            Value(as uint): @model.AsRecord.Value
        </div>
    </div>
</div>

@if(model.IsDirty)
{
    <div class="alert alert-danger">Navigation is locked</div>
}

<NavigationLock OnBeforeInternalNavigation=this.OnLocationChanging ConfirmExternalNavigation=model.IsDirty />


@code {
    private EditModel model = new(new DboModel());

    public void OnLocationChanging(LocationChangingContext context)
    {
        if (model.IsDirty)
            context.PreventNavigation();
    }

}

Информации о новых элементах управления Fluent нигде нет, и все до сих пор используют старые, которые тоже работают не очень хорошо.

Ктоeveryone? Мы очень редко видим здесь вопросы об элементах управления Fluent. Большинство людей используют другие библиотеки или пишут свои собственные.

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