Blazor Fluent UI Editform Ошибка «EditForm требует либо параметр модели»

Я изучаю Blazor и адаптирую Fluent UI, потому что они оба созданы Microsoft и думаю, что они будут работать хорошо.

Поэтому я меняю HTML-форму редактирования ниже на свободную форму редактирования. Я применяю его, просматривая описание формы на сайте Blazor Fluent UI, и когда я нажимаю кнопку «Войти», появляется сообщение: «EditForm требует либо параметра Model, либо параметра EditContext, укажите один из них. " Я получаю эту ошибку.

Это работает нормально.

        <EditForm Model = "@loginModel" OnValidSubmit = "Authenticate" FormName = "LoginForm">
            <DataAnnotationsValidator />
            <div class = "mb-3 text-center flex-cloumn">
                <h3>LOGIN</h3>
            </div>
            <div class = "mb-3">
                <label for = "userName" class = "form-label">User Name:</label>
                <InputText id = "userName" @bind-Value = "loginModel.UserName" class = "form-control" />
                <ValidationMessage For = "() => loginModel.UserName" class = "text-danger" />
            </div>
            <div class = "mb-3">
                <label for = "password" class = "form-label">Password:</label>
                <InputText id = "password" @bind-Value = "loginModel.Password" class = "form-control" />
                <ValidationMessage For = "() => loginModel.Password" class = "text-danger" />
            </div>
            <div class = "mb-3 text-center">
                <span class = "text-danger">@errorMessage</span>
            </div>
            <button type = "submit" class = "btn btn-primary">Login</button>
        </EditForm>

@code {
    [SupplyParameterFromForm]
    public LoginViewModel loginModel { get; set; } = new();

    private string? errorMessage;

    private async Task Authenticate()
    {
        Console.WriteLine("Authenticate called");
    }
}

но это не так

        <FluentEditForm Model = "@loginModel" OnValidSubmit = "Authenticate" FormName = "LoginForm" novalidate>
            <DataAnnotationsValidator />
            
            <FluentStack Orientation = "Orientation.Vertical">
                <h3>LOGIN</h3>
                <div>
                    <FluentTextField Name = "userName" @bind-Value = "loginModel.UserName" Label = "User Name" Required />
                    <FluentValidationMessage For = "@(() => loginModel.UserName)"/>
                </div>
                <div>
                    <FluentTextField Name = "password" @bind-Value = "loginModel.Password" TextFieldType = "TextFieldType.Password" Label = "Password" Required />
                    <FluentValidationMessage For = "@(() => loginModel.Password)"/>
                </div>
                <FluentButton Type = "ButtonType.Submit" Appearance = "Appearance.Accent">Login</FluentButton>
            </FluentStack>
        </FluentEditForm>

@code {
    [SupplyParameterFromForm]
    public LoginViewModel loginModel { get; set; } = new();

    private string? errorMessage;

    private async Task Authenticate()
    {
        Console.WriteLine("Authenticate called");
    }
}

Я уже предоставляю параметр модели в теге FluentEditform, но получаю эту ошибку, поэтому это не имеет особого смысла.

InvalidOperationException: EditForm требуется либо параметр модели, либо параметр EditContext, укажите один из них.

Microsoft.AspNetCore.Components.Forms.EditForm.OnParametersSet()
Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()
Microsoft.AspNetCore.Components.Rendering.ComponentState.SupplyCombinedParameters(ParameterView directAndCascadingParameters)
Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InitializeNewSubtree(ref DiffContext diffContext, int frameIndex)
Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InsertNewFrame(ref DiffContext diffContext, int newFrameIndex)
Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(ref DiffContext diffContext, int oldStartIndex, int oldEndIndexExcl, int newStartIndex, int newEndIndexExcl)
Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, out Exception renderFragmentException)
Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()
Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()
Microsoft.AspNetCore.Components.ComponentBase.StateHasChanged()
Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()
Microsoft.AspNetCore.Components.Rendering.ComponentState.SupplyCombinedParameters(ParameterView directAndCascadingParameters)
Microsoft.AspNetCore.Components.Rendering.ComponentState.SetDirectParameters(ParameterView parameters)
Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderRootComponentAsync(int componentId, ParameterView initialParameters)
Microsoft.AspNetCore.Components.HtmlRendering.Infrastructure.StaticHtmlRenderer.BeginRenderingComponent(IComponent component, ParameterView initialParameters)
Microsoft.AspNetCore.Components.Endpoints.EndpointHtmlRenderer.RenderEndpointComponent(HttpContext httpContext, Type rootComponentType, ParameterView parameters, bool waitForQuiescence)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
Microsoft.AspNetCore.Components.Endpoints.RazorComponentEndpointInvoker.RenderComponentCore(HttpContext context)
Microsoft.AspNetCore.Components.Endpoints.RazorComponentEndpointInvoker.RenderComponentCore(HttpContext context)
Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext+<>c+<<InvokeAsync>b__10_0>d.MoveNext()
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Antiforgery.Internal.AntiforgeryMiddleware.InvokeAwaited(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

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

Я попробовал подписаться на этот пост , но хочу использовать httpcontext на статических страницах, поэтому надеялся, что есть другой обходной путь.

Какой RenderMode вы используете и где настроена интерактивность?

MrC aka Shaun Curtis 14.06.2024 17:12

Я использую ssr, когда я устанавливаю интерактивный сервер, он работает. но если я это установлю, я не смогу использовать httpcontext.

user25573463 14.06.2024 17:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Есть небольшая разница при использовании FluentTextField в SSR. Вам необходимо установить свойство «Имя» модели, например Name = "loginModel.UserName".

...
<FluentTextField Name = "loginModel.UserName" @bind-Value = "loginModel.UserName" Label = "User Name" Required />
...
<FluentTextField Name = "loginModel.Password" @bind-Value = "loginModel.Password" TextFieldType = "TextFieldType.Password" Label = "Password" Required />
...

Тогда форма редактирования будет работать.

Это работает! большое спасибо!

user25573463 18.06.2024 04:10

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