提交后让 Blazor InputText 保持焦点
Have Blazor InputText keep focus after submitting
我正在为我的 Blazor 应用构建一个聊天小部件。它也可以,但是为了让它更流畅地工作,我想在提交消息后将焦点留在 InputText 中。
只要我按回车键,消息就会正确发送和接收。不幸的是,焦点也无处不在。这不会让您在聊天中快速输入多条消息。
我想我可以制作一个 JS 互操作方法,将焦点发送回 InputText 并在每次提交后调用它,但我更愿意找到一个无 js 的解决方案。
我的 Razor 标记是这样的:
<EditForm Model="message" OnSubmit="SendMessage">
<InputText type="text" @bind-Value="message.Message" />
</EditForm>
我这样发消息:
private async Task SendMessage()
{
Console.WriteLine("Send message " + message.Message);
var t = Service.SendMessage(message);
messages.Add(message);
message = new Library.Models.ChatMessage();
await t;
Console.WriteLine("Sending finished.");
}
这通常不会出现在 HTML 形式中。失去焦点是树重新渲染造成的
作为解决方法,不是很漂亮:
private async Task SendMessage()
{
Console.WriteLine("Send message " + message.Message);
var copy = new Library.Models.ChatMessage { Message = message.Message };
var t = Service.SendMessage(copy);
messages.Add(copy);
// message = new Library.Models.ChatMessage(); -- this was the problem
message.Message = "";
await t;
Console.WriteLine("Sending finished.");
}
我对 @key
进行了一些试验,但无法正常工作。
我正在为我的 Blazor 应用构建一个聊天小部件。它也可以,但是为了让它更流畅地工作,我想在提交消息后将焦点留在 InputText 中。
只要我按回车键,消息就会正确发送和接收。不幸的是,焦点也无处不在。这不会让您在聊天中快速输入多条消息。
我想我可以制作一个 JS 互操作方法,将焦点发送回 InputText 并在每次提交后调用它,但我更愿意找到一个无 js 的解决方案。
我的 Razor 标记是这样的:
<EditForm Model="message" OnSubmit="SendMessage">
<InputText type="text" @bind-Value="message.Message" />
</EditForm>
我这样发消息:
private async Task SendMessage()
{
Console.WriteLine("Send message " + message.Message);
var t = Service.SendMessage(message);
messages.Add(message);
message = new Library.Models.ChatMessage();
await t;
Console.WriteLine("Sending finished.");
}
这通常不会出现在 HTML 形式中。失去焦点是树重新渲染造成的
作为解决方法,不是很漂亮:
private async Task SendMessage()
{
Console.WriteLine("Send message " + message.Message);
var copy = new Library.Models.ChatMessage { Message = message.Message };
var t = Service.SendMessage(copy);
messages.Add(copy);
// message = new Library.Models.ChatMessage(); -- this was the problem
message.Message = "";
await t;
Console.WriteLine("Sending finished.");
}
我对 @key
进行了一些试验,但无法正常工作。