如何在Blazor的onkeypress方法中读取输入的当前值?

时间:2018-10-04 16:44:10

标签: c# asp.net blazor

我有:

<input onkeypress="@Foo" />

和:

@functions
{
    void Foo(UIKeyboardEventArgs e)
    {

    }
}

如何传递或以其他方式获取处理程序方法中输入的值?

8 个答案:

答案 0 :(得分:5)

对于正在搜索此内容的人,您可以使用.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);
    }
}

答案 1 :(得分:2)

“ KeyboardEvent事件仅指示用户与键盘上的按键处于低级别的交互作用”。为了访问文本输入,您应该改用输入事件或更改事件。在Blazor中,现在输入事件由change事件包装;也就是说,只有在input元素失去焦点之后,您的代码才能访问新值。但是,您应该做的是定义一个属性,该属性绑定到input元素,可以在代码中进行访问以进行检索:

protected string MyInput {get; set;}

<input type="text" bind="@MyInput" /> 

以上绑定内部基于更改事件,而不是输入事件(再次,现在在Blazor中是不可能的)

答案 2 :(得分:1)

您可以改用“ oninput”事件。每当输入元素的值更改时,都会调用此事件。它采用一个参数,即UIChangeEventArgs,该参数包含具有Input-elements当前值的Value属性。 例如

<input type="text" oninput="@((ui) => { Foo((string)ui.Value);})"/>

@function {
    void Foo(string s)
    {
        //do stuff
    }
}

答案 3 :(得分:1)

不幸的是,您需要 oninput 事件来更新绑定变量。

    cd ~/.rstudio/sessions/active/session-45204d30
    rm -rf suspended-session-data

答案 4 :(得分:1)

如果只希望输入实时更新绑定值,则可以使用:

<input @bind-value="foo" @bind-value:event="oninput" />

如果您特别想将事件与键盘事件args关联,则可以执行以下操作:

<input @bind-value="foo" @onkeypress="HandleKeyPress" />
@bar
@code {
    string foo;
    string bar;
    void HandleKeyPress(KeyboardEventArgs args)
    {
        bar = $"You just pressed {args.Key}!";
    }
}

答案 5 :(得分:0)

搜索相同的内容。

Blazor WASM (.NET 5) 的正确答案是:

@code {
   public string OurField { get; set; }
}

<Element @bind-ElementFieldName="OurField" />

来自 TextEditBlazorise 示例:

@code {
   private string Login { get; set; }
}

<TextEdit @bind-Text="Login"></TextEdit>

答案 6 :(得分:0)

使用 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();
    }
}

答案 7 :(得分:-1)

为简单起见,您可以使用以下代码:

<input bind-value-oninput="@stringValue"/>

@functions {
string stringValue;
}