当用户在文本框(输入)中键入时,如何调用异步方法?

时间:2020-03-27 14:07:06

标签: blazor blazor-server-side asp.net-blazor

我想在每次对文本框进行更改时都调用异步方法。

我已经搜索了一段时间,现在正在谷歌搜索并尝试使用发现的语法。以下代码似乎是最准确的。

剃刀页面代码:

    <div class="offset-sm-5 col-sm-3">
        <div class="input-group">
            <input class="form-control" @oninput="@(async () => await OnSearchAsync())"/>
        </div>
    </div>

隐藏代码:

    public class ListBase: ComponentBase
    {
        [Inject]
        public IVpbDelegateAdminService VpbDelegateAdminService { get; set; }

        protected VpbDelegateListVm VpbDelegateListVm { get; set; }

        protected override async Task OnInitializedAsync()
        {
            VpbDelegateListVm  = await VpbDelegateAdminService.GetVpbDelegateListVmAsync(1);
        }

        protected async Task OnSearchAsync()
        {
            VpbDelegateListVm = await VpbDelegateAdminService.GetVpbDelegateListVmAsync(2);
        }
    }

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您是否要尝试从后面的代码中调用方法?

如果是这样,应该可以。

 <div class="offset-sm-5 col-sm-3">
        <div class="input-group">
            <input class="form-control" @oninput="@OnSearchAsync"/>
        </div>
    </div>

@code
{
    private async Task OnSearchAsync()
    {
        var data = await GetYourData();
    }
}

答案 1 :(得分:-1)

我的解决方法是

@page "/Demo_domtree_input_typing"

@{ BlazorSession.Current["codename"] = "Demo_domtree_input_typing"; }

Your message :
<BlazorDomTree @ref="dt"></BlazorDomTree>

@code{

    BlazorDomTree dt;

    protected override void OnAfterRender(bool first)
    {
        if (!first)
            return;

        PlusControl inp1 = dt.Root.Create("input type='text'");
        inp1.OnChanging(delegate
        {
            BlazorSession.Current.Toast("Your are typing '" + inp1.Value + "'", 1000, "typinginfo");
        });
    }
}

在线实时演示: http://demo.blazorplus.com/Demo_domtree_input_typing

(它需要导入并设置nuget包'BlazorPlus')