我有红色如何使用ASP.NET应用程序example Async-ASP.NET中的异步方法。
现在我需要在CustomValidator
事件ServerValidate
上调用web服务,并通过服务结果决定,如果值有效。服务方法是异步的,我不确定,如何处理这个。如果我使用async void事件处理程序,则验证无法正常工作,因为验证消息不会在验证不成功的情况下显示。似乎等待不等待Web服务的结果,ASP.NET也没有等待验证器发送响应。
解决这个问题的正确方法是什么?或者如何在验证器事件处理程序中使用RegisterAsyncTask
?页面设置为Async="true"
。
我的代码:
protected async void cvWorkplace_ServerValidate(object sender, ServerValidateEventArgs e)
{
// do test call to sap
var testResult = await PerformLabelServiceTestCallAsync(materialId, ddPlant.SelectedValue, workplaceName, UsersLanguage);
if (testResult.HasError)
{
e.IsValid = false;
// other stuff
// ...
}
else
{
e.IsValid = true;
}
}
答案 0 :(得分:0)
这将立即返回,并且调用代码将在e.IsValid
设置之前评估cvWorkplace_ServerValidate
。
RegisterAsyncTask
是Page
类的一种方法,它是您网页的基类,您可以使用cvWorkplace_ServerValidate
方法调用它,这是您网页的一种方法。
但是,即使您注册了异步任务,也无法通过cvWorkplace_ServerValidate
方法获得结果。
最好的方法是注册一个异步任务,该任务将在页面类中设置一个字段并相应地进行渲染。