Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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# 异步调用后面板中不可见必需的字段验证程序_C#_Asp.net_Asynchronous_Async Await - Fatal编程技术网

C# 异步调用后面板中不可见必需的字段验证程序

C# 异步调用后面板中不可见必需的字段验证程序,c#,asp.net,asynchronous,async-await,C#,Asp.net,Asynchronous,Async Await,我遇到了一个奇怪的情况,asp.net验证控件没有呈现到页面。该控件位于最初隐藏的asp.net面板中,该面板根据async调用的结果变得可见 以下是小组讨论: <asp:Panel ID="pnlGasReading" runat="server" Visible="false" CssClass="form-group clearfix"> <asp:Label ID="lblFinalGasReading" runat="server" AssociatedCon

我遇到了一个奇怪的情况,asp.net验证控件没有呈现到页面。该控件位于最初隐藏的asp.net面板中,该面板根据
async
调用的结果变得可见

以下是小组讨论:

<asp:Panel ID="pnlGasReading" runat="server" Visible="false" CssClass="form-group clearfix">
    <asp:Label ID="lblFinalGasReading" runat="server" AssociatedControlID="txtFinalGasReading" Text="Final Gas Reading" />
    <flow:HelpText runat="server" ID="ucFinalGasReadingHelpText" HelpTextKey="ChangeOfTenancy-FinalGasReading" />
    <asp:TextBox ID="txtFinalGasReading" runat="server" CssClass="form-control" />
    <asp:RequiredFieldValidator runat="server" ID="valFinalGasReading" ControlToValidate="txtFinalGasReading" ErrorMessage="Final Gas Reading is required." ValidationGroup="COTForm" Display="Dynamic" CssClass="animate-error" />
</asp:Panel>
这在页面加载事件中由以下人员调用:

Page.RegisterAsyncTask(new PageAsyncTask(ConfigureAlreadyMovedMeterReadingFields));
由于此调用本质上是“激发并忘记”,并且在继续执行其余页面执行之前不会等待,因此我相信在异步方法调用完成之前,页面加载已经完成

我发现面板内的字段都显示出来,例如标签、文本框、帮助文本控件,但是所需的字段验证程序没有显示

所需的字段验证器是否有什么特殊之处,意味着它需要在页面加载完成之前出现在页面上?有没有办法等待这次通话的结果,这样我们就不会以这种比赛状态结束

我已尝试将页面加载标记为异步,例如:

protected async void Page_Load(object sender, EventArgs e)
然后等待结果,但这会抛出一个错误:

此时无法启动异步操作。异步操作只能在异步处理程序或模块内启动,或在页面生命周期中的某些事件期间启动

在阅读上的文档时,它声明在
页面注册的任务。RegisterAsyncTask
将在页面
预渲染
事件中运行:

当为非异步页面调用任何已注册的异步任务(如果存在)时,ExecuteRegisteredAsyncTasks方法将在页面处理中的某个点自动调用。此对ExecuteRegisteredAsyncTasks的自动调用发生在PreRenderComplete事件之前


这在页面生命周期中太晚了。您可以通过
页面立即运行任何排队的异步任务。ExecuteRegisteredAsyncTasks
似乎解决了我的问题,但是它没有解释为什么面板中的某些控件仍然工作
文本框
/
标签
,例如显示得很好。
RequiredFieldValidators
必须有一些特殊情况,要求它们在
PageLoad
事件完成之前可见。

async的问题是,它可以在页面生命周期之后完成。这意味着在任务完成时,完整的html已经呈现并发送到浏览器。所以更改可见性不起作用。@VDWWD-是的,我确实怀疑页面在异步调用返回之前加载。这并不能解释为什么会加载一些控件,如文本框/标签等。。。但是所需的字段验证器不是,RFV必须有一些特殊之处,要求它在页面加载/预呈现事件之前可见。我添加了一个更详细的答案。
protected async void Page_Load(object sender, EventArgs e)