Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值异步写入Razor页面字段_C#_Asp.net_Asp.net Core_Razor_Razor Pages - Fatal编程技术网

C# 将值异步写入Razor页面字段

C# 将值异步写入Razor页面字段,c#,asp.net,asp.net-core,razor,razor-pages,C#,Asp.net,Asp.net Core,Razor,Razor Pages,我正在我的Razor页面中调用异步任务。我可以在代码中的某些位置设置文本框的值,但在其他位置则不能。我的评论显示了它的工作原理和不工作原理。我如何在我的评论所说的我想要的地方向我的文本框中写入值 <label for="PersonID">PersonID:</label> <input asp-for="@Model.PersonID" type="text" value="@Model.Per

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

<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.

}
PersonID:
公共字符串PersonID{get;set;}
公共异步void OnGet()
{
//在这里做些事情
//在此处设置PersonID将值放置在我的页面上
等待连接器();
//在此处设置PersonID不会将该值放在我的页面上
}
公共异步任务ConnectToPerson()
{
//在这里做些事情
//在此处设置PersonID将值放置在我的页面上
等待client.Connect();
//在这里设置PersonID不会将值放在我的页面上,我想在这里设置它,因为客户端将返回值。
}

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

您可以将OnGet更改为OnGetAsync以执行异步操作,并返回任务

public async Task OnGetAsync()
{
        
    await ConnectToPerson();

    //Set PersonID here
        
}

谢谢,我认为从技术上来说,这回答了这个问题,但现在给了我另一个问题。我之前做的事等待着ConnectToPerson();创建并显示二维码。用户扫描二维码和等待ConnectToPerson()的响应表单;他正在等待。但做出更改意味着二维码现在无法显示,因此等待的事情不会发生。@mjuk:听起来不对。您能验证是否正在调用新的OnGetAsync方法吗?是的,已经设置了一些断点,所有操作都在wait client.Connect()之前执行,包括wait client.Connect();但是之后什么都没有,并且我的页面仍在浏览器中加载,因此在它被卡住的地方没有呈现任何内容。您是否确定您更改了方法签名以返回任务而不是
void
?是的,请在此处复制并粘贴-public async Task OnGetAsync()其中的代码确实会执行并调用公共异步任务ConnectToPerson()