2010-02-01 3 views
0

J'ai un problème étrange avec un formulaire Web sur lequel je travaille qui semble lié à des choses asynchrones. Fondamentalement, je dois faire ce qui suit:Problèmes de synchronisation ASP.NET

UserInputPanel.Visible = False 
ProgressPanel.Visible = True 
ResultsSet = New DataSet() 
GetResults(ResultsSet) 
FillOutput() 
ProgressPanel.Visible = False 
OutputPanel.Visible = True 

Ce code s'exécute tout en cliquant sur un bouton sur le WebForm. L'appel à GetResults (ResultsSet) est long, d'où la nécessité d'afficher le panneau ProgressPanel. Le problème est, l'appel à GetResults se passe avant que mon ProgressPanel montre réellement. Si je commente l'appel de GetResults et les lignes qui suivent, ProgressPanel ne présente aucun problème. Comment puis-je forcer l'exécution et l'affichage des deux premières lignes sur la page avant l'appel de GetResults?

Répondre

1

Il semble que vous deviez utiliser le contrôle UpdateProgress au lieu d'essayer de déclencher le vôtre. Lorsque vous cliquez sur le bouton de formulaire, tout le code du côté serveur clique sur le gestionnaire avant que toute réponse ne soit envoyée au client.

Vous avez besoin quelque chose comme ça au lieu de votre ProgressPanel:

<asp:UpdateProgress ID="UpdateProgress1" runat="server"> 
    <ProgressTemplate> 

    </ProgressTemplate> 
</asp:UpdateProgress> 

Le contenu du ProgressTemplate se whent affichent automatiquement la publication asynchrone démarre, puis se cacheront une fois qu'il est terminé.

Pour masquer la UserInputPanel, créer une fonction javascript comme les suivantes (utilisez jQuery ou un autre cadre de côté client pour le code du navigateur cross plus robuste):

function hideUserInput() { 
    document.getElementById('<%=UserInputPanel.ClientID%>').style.visibility="hidden"; 
} 

et attach cette fonction à votre bouton de OnClientClick propriété:

<asp:button id="YourButton" 
     text="Submit" 
     onclientclick="hideUserInput()" 
     runat="server" onclick="YourButton_Click" /> 
+0

Je vois comment cela fonctionne - mais le problème est, j'ai encore besoin de masquer le panneau UserInput afin que l'utilisateur ne puisse pas jouer avec lui pendant la mise à jour. – piratepops

+0

J'ai ajouté un exemple de comment masquer le panneau 'UserInput'. – jball

Questions connexes