C# 将值异步写入Razor页面字段
我正在我的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
<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()