我有:
<input onkeypress="@Foo" />
和:
@functions
{
void Foo(UIKeyboardEventArgs e)
{
}
}
如何传递或以其他方式检索处理程序方法中的输入值?
不幸的是,您需要oninput事件来更新绑定变量。
@value
<input type="text" @bind="@value" @oninput="@(ui => { value = (string) ui.Value);})" />
@functions {
string value;
}
对于搜索此内容的人,您可以使用 .net core 3.1 实现此功能,以处理 Blazor 上的按键事件。
<input value="@stringValue" @oninput="(EventArgs) => {SetValue(EventArgs.Value.ToString()); DoSomethingElse();}"/>
@code {
string stringValue = "";
private void SetValue(string Value)
{
stringValue = int.Parse(Value);
}
}
“KeyboardEvent 事件仅指示用户在低级别与键盘上的键进行的交互”。为了访问文本输入,您应该使用 input 事件或 change 事件。在 Blazor 中,现在输入事件由更改事件包装;也就是说,您的代码只有在输入元素失去焦点后才能访问新值。但是,您应该做的是定义一个绑定到输入元素的属性,并且可以在您的代码中访问以进行检索:
protected string MyInput {get; set;}
<input type="text" bind="@MyInput" />
上面的绑定在内部基于更改事件,而不是输入事件(同样,现在在 Blazor 中是不可能的)
您可以改用“oninput”事件。每次输入元素的值发生变化时都会调用此事件。它采用一个参数,即 UIChangeEventArgs,其中包含具有 Input-elements 当前值的 Value 属性。例如
<input type="text" oninput="@((ui) => { Foo((string)ui.Value);})"/>
@function {
void Foo(string s)
{
//do stuff
}
}
如果您只想让输入实时更新绑定值,您可以使用:
<input @bind-value="foo" @bind-value:event="oninput" />
如果您特别想将您的事件与键盘事件参数相关联,那么这样的事情将起作用:
<input @bind-value="foo" @onkeypress="HandleKeyPress" />
@bar
@code {
string foo;
string bar;
void HandleKeyPress(KeyboardEventArgs args)
{
bar = $"You just pressed {args.Key}!";
}
}
搜索了同样的东西。
Blazor WASM (.NET 5) 的正确答案是:
@code {
public string OurField { get; set; }
}
<Element @bind-ElementFieldName="OurField" />
示例TextEdit
来自Blazorise
:
@code {
private string Login { get; set; }
}
<TextEdit @bind-Text="Login"></TextEdit>
使用oninput
事件。
<input type="text" @oninput="UpdateText"/>
The text is <label>@Text</label>
@code {
public string Text { get; set; }
private void UpdateText(ChangeEventArgs e)
{
Text = e.Value.ToString();
}
}
为简单起见,您可以使用以下代码:
<input bind-value-oninput="@stringValue"/>
@functions {
string stringValue;
}