【问题标题】:Writing values to Razor Pages fields async将值异步写入 Razor 页面字段
【发布时间】:2021-08-03 00:47:23
【问题描述】:

我正在 Razor 页面中调用异步任务。我可以在代码中的某些地方设置文本框的值,但在其他地方则不行。我的 cmets 显示了它的工作原理和不工作的地方。如何在我的 cmets 说我想要的位置向我的文本框写入值?

<label for="PersonID">PersonID:</label>
<input asp-for="@Model.PersonID" type="text" value="@Model.PersonID" />

public string PersonID { get; set; }

public async void OnGet()
{
    // Do some stuff here
    //Setting PersonID here places the value on my page
        
    await ConnectToPerson();

    //Setting PersonID here DOES NOT place the value on my page
        
}


public async Task ConnectToPerson()
{
    // Do some stuff here
    //Setting PersonID here places the value on my page

    await client.Connect();

    //Setting PersonID here DOES NOT place the value on my page and this is where I want to set it as client will have values returned.

}

【问题讨论】:

    标签: c# asp.net asp.net-core razor razor-pages


    【解决方案1】:

    发生这种情况是因为 OnGet 和 ConnectToPerson 在您执行异步操作后立即返回。 ConnectToPerson 返回一个 Task,这很好,但 OnGet 没有,因此调用它的代码无法知道它正在进行需要等待的异步操作。

    looks like 你可以将 OnGet 改为 OnGetAsync 来执行异步操作,返回一个 Task。

    public async Task OnGetAsync()
    {
            
        await ConnectToPerson();
    
        //Set PersonID here
            
    }
    

    【讨论】:

    • 谢谢,我认为从技术上讲可以回答它,但现在给我带来了另一个问题。我之前做的事情 await ConnectToPerson();是创建并显示一个二维码。用户扫描二维码和等待 ConnectToPerson() 的响应表单;正在等待。但是进行更改意味着二维码现在不会显示,因此等待的事情不会发生。
    • @mjuk:听起来不对。您能否验证是否正在调用新的 OnGetAsync 方法?
    • 是的,已经设置了一些断点,一切都执行到并包括 await client.Connect();但之后什么也没有,我的页面仍在浏览器中加载,因此在卡住的那一点没有呈现任何内容。
    • 您是否肯定更改了方法签名以返回任务而不是void
    • 是的,在这里复制和粘贴以确保 - public async Task OnGetAsync() 和里面的代码确实被执行并调用了 public async Task ConnectToPerson()
    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2019-04-04
    • 2015-05-06
    • 1970-01-01
    相关资源
    最近更新 更多