2010-10-18 3 views
2

Nous avions des rapports occasionnels où la valeur d'un ensemble de DropDownBoxs dans un GridView serait réinitialisée au premier élément de valeur dans la liste. Nous avons finalement trouvé un problème de synchronisation où un utilisateur cliquait sur Enregistrer avant que la page ne finisse le rendu/chargement des données, et nous pouvons le reprocher sur le serveur de production mais pas localement car la page se charge trop rapidement.asp.net postback avant la page full loaded cause dropdownlist ayant la mauvaise valeur SelectedValue

Comment ferions-nous pour détecter cela du côté du serveur pour savoir si les données renvoyées ne sont pas valides ou sinon arrêter de définir les données que l'utilisateur n'a pas définies?

+0

Comment la valeur SelectedValue du dropdown est-elle définie? Si c'est fait côté serveur, la réponse du serveur à la demande initiale doit être html qui marque l'élément approprié comme sélectionné, peu importe la rapidité avec laquelle l'utilisateur fait quoi que ce soit. – jelbourn

+0

Il est en cours d'installation côté serveur qui est la partie confuse. Je pense que c'est parce que le DOM n'est pas complètement chargé. La page est toujours en cours de téléchargement à ce stade. – Davy8

Répondre

1

pensé à activer le bouton Enregistrer seulement si la page est chargée?

une autre suggestion ... la liste déroulante a-t-elle un identifiant? J'ai eu des problèmes curieux avec les contrôles générés dynamiquement sans un ID, renvoyant des valeurs erronées après une publication ...

0

J'ai eu le même problème. Travaillé correctement localement, mais un utilisateur occasionnel de la production soumettrait en quelque sorte la page avec des données de formulaire partielles. À partir de la journalisation, j'ai pu voir que les variables HttpRequestFormVariables semblaient normales jusqu'à un certain point, puis les valeurs devenaient vides, ce qui entraînait le rejet par le site d'une exception non gérée.

ctl00 $ MainContentPlaceHolder $ foo $ rptForm $ ctl01 $ txtFormFieldId = 3815 ctl00 $ MainContentPlaceHolder $ foo $ rptForm $ ctl02 $ txtFormFieldId = 3816 ctl00 $ MainContentPlaceHolder $ foo $ rptForm $ ctl03 $ txtFormFieldId = 3817 ctl00 $ MainContentPlaceHolder $ foo $ rptForm $ ctl04 $ txtFormFieldId = 3818 $ ctl00 MainContentPlaceHolder $ foo $ rptForm $ ctl05 $ txtFormFieldId = ctl00 $ MainContentPlaceHolder $ foo $ rptForm $ ctl05 $ txtFormFieldId =

La seule façon que je suis capable de le reproduire est d'ajouter du Javascript à la e page pour le faire soumettre avant complètement chargé.

<script type="text/javascript"> 
    $("input[id$='btnSubmit']").click(); 
</script> 

Je pense que je vais devoir envoyer btnSubmit à partir du serveur dans l'état désactivé puis l'activer Javascript de la page après la fin du chargement.

if (btnSubmit.Enabled) 
{ 
     btnSubmit.Enabled = false; 
     string script = "$(document).ready(function() {$(\"input[id$='" + btnSubmit.ClientID + "']\").removeAttr('disabled');});"; 
     this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "EnableSubmitButton", script, true); 
} 
Questions connexes