Как программно отправить форму Blazor?

Наличие Blazor EditForm и содержащееся InputTextArea (т.е. многострочное текстовое поле), я действительно хочу проверить и отправить форму, когда пользователь нажимает Ctrl + Enter, как если бы он щелкнул кнопку отправки.

Я успешно подключил обработчик клавиатуры следующим образом:

<EditForm Model="@myModel" Format="g" OnValidSubmit="@Store" @ref="_editForm">
    <InputTextArea 
        onkeypress="@(async e => await myKeyPress(e))"
        @bind-Value="myModel.Foo" />
    <button type="submit">Store it</button>
</EditForm>

С этим кодом:

private EditForm _editForm;

private async Task myKeyPress(KeyboardEventArgs key)
{
    if (key.CtrlKey && key.Code == @"Enter")
    {
        _editForm.??? // What to call here?
    }
}

К сожалению, я не вижу в классе EditForm метода, который я мог бы вызвать для отправки и проверки формы, как если бы пользователь нажал кнопку отправки.

Я просмотрел это и этот ТАК вопрос безуспешно.

Мой вопрос

Как программно отправить и проверить форму Blazor?


person Uwe Keim    schedule 13.06.2020    source источник
comment
Но предположим, что пользователь нажал Enter только после ввода. Это также отправит форму ... На самом деле, форма всегда отправляется, если элемент управления вводом имеет фокус, и вы нажимаете Enter. Подумайте об этом и переформулируйте свой вопрос ...   -  person enet    schedule 13.06.2020
comment
@enet Поскольку это Input TextArea, который является многострочным элементом управления, нажатие клавиши Enter просто помещает курсор клавиатуры в следующую строку.   -  person Uwe Keim    schedule 13.06.2020
comment
Да, ты прав. Я не обращал внимания на этот факт.   -  person enet    schedule 13.06.2020


Ответы (1)


person    schedule
comment
Большое спасибо, Питер. Это почти сработало. К сожалению, InputTextArea проверяет, что он не должен быть пустым. Когда это поле имеет фокус ввода и срабатывает обработчик клавиатуры, обмен между текстовым полем и связанным полем модели еще не выполняется. Мне нужно сначала изменить фокус ввода вперед и назад. Я даже попробовал позвонитьNotifyFieldChanged безуспешно. Любой намек на то, следует ли / как заполнить значение модели даже без изменения фокуса? - person Uwe Keim; 14.06.2020
comment
Хорошо, я решил это, создав свой собственный InputTextArea (например, здесь) и добавив обработчик oninput в дополнение к onchange обработчик. Фактически, я скопировал код из исходный источник и добавил обработчик oninput. При этом смена срабатывает не только при потере фокуса, но и сразу. - person Uwe Keim; 14.06.2020
comment
@Uwe Keim, см. Это: stackoverflow.com/a/62103477/6152891 Я считаю, что именно так у вас должно быть сделал это ... Не могли бы вы опубликовать свое решение здесь. - person enet; 14.06.2020
comment
@UweKeim Попробуйте добавить @bind-Value:event="oninput" в свой InputText. Не уверен, что это сработает, но может. - person Peter Morris; 14.06.2020
comment
Спасибо, @PeterMorris. Ваша помощь здесь, а также масса руководств и примеров на вашем веб-сайте помогли мне и помогли мне во многих потрясающих случаях. Большое спасибо за ваши старания! - person Uwe Keim; 14.06.2020
comment
@UweKeim Тогда это сработало на <InputText>? Думал, надо, но никогда не пробовал. - person Peter Morris; 14.06.2020
comment
Я сохранил решение с моим классом, производным от InputTextArea, это было для меня более простым. - person Uwe Keim; 14.06.2020