从ASP.NET验证器处理程序调用异步方法

时间:2015-08-11 08:10:02

标签: asp.net async-await

我有红色如何使用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;
    }
}

1 个答案:

答案 0 :(得分:0)

这将立即返回,并且调用代码将在e.IsValid设置之前评估cvWorkplace_ServerValidate

RegisterAsyncTaskPage类的一种方法,它是您网页的基类,您可以使用cvWorkplace_ServerValidate方法调用它,这是您网页的一种方法。

但是,即使您注册了异步任务,也无法通过cvWorkplace_ServerValidate方法获得结果。

最好的方法是注册一个异步任务,该任务将在页面类中设置一个字段并相应地进行渲染。