2009-10-19 6 views
0

Je montre un modalpopupextender en utilisant javascript, et quand je clique sur son bouton de sauvegarde, il enregistre les choses que j'ai saisies, et (comme son un bouton) postsback automatiquement afin que la page se rafraîchit .Mystérieux problèmes de publication avec javascript (asp.net)

Cependant quand il se rafraîchit, j'obtiens une erreur parce qu'il dit que le contrôle de case à cocher que je définis sur ma page aspx est nul. L'une des premières choses que je fais quand la page se charge est de créer du javascript et de fournir différents ID clients pour mes composants, et le dernier à ajouter est chkFullyBooked.ClientID.

Lorsque la page est chargée la première fois, c'est correct, mais après l'avoir affichée, elle indique que ma case est null. Un autre problème est que dans ma fonction de bouton de sauvegarde, alors qu'il peut récupérer la valeur des zones de texte et la case à cocher dans le code, il ne peut pas obtenir le texte des étiquettes qui ont changé ... textboxes cependant.

Je n'arrive pas à comprendre la raison pour laquelle le contrôle case à cocher (codé en dur dans ma page avec d'autres zones de texte) reviendrait à zéro sur une actualisation de page.

code en haut de ma page ASPX:

<% Response.Write("<script language='javascript' type='text/javascript'>" + 

    "function DisplayModalPopup(dateCreated, note, editedBy, fullybooked) {" + 

     "var modalDialog = $find('AddressErrorPopup');" + 

     "document.getElementById('" + txtNote.ClientID + "').value = note;" + 

     "if (modalDialog != null) { modalDialog.show(); }" + 

     "var lblLastEditBy = document.getElementById('" + txtLastEditBy.ClientID + "');" + 
     "lblLastEditBy.value = editedBy;" + 

     "var lblDateCreated = document.getElementById('" + txtTallyBoardEntryDate.ClientID + "');" + 
     "lblDateCreated.value = dateCreated;" + 

     "var fullyBooked = document.getElementById('" + chkFullyBooked.ClientID + "');" + 
     "fullyBooked.value = fullybooked;" + 


    "} " + 
"</script>"); %> 

Plus tard dans mon code, un extrait:

. 
. 
. 
    <tr> 
    <td colspan="2" style="text-align:left">Last Edit by - <asp:TextBox ID="txtLastEditBy" ReadOnly="true" runat="server"></asp:TextBox></td> 
    </tr> 
    <tr><td colspan="2" style="text-align:left"><asp:CheckBox runat="server" ID="chkFullyBooked" Text="Fully Booked?" Checked="false"/></td></tr> 
. 
. 
. 

Edit: Bien sûr, cela signifie que je reçois une exception de référence null sur la code ci-dessus car il ne peut pas accéder à ClientID.

Edit: Comme solution de merde je l'ai fait response.redirect (request.url.tostring) au lieu de laisser le bouton postback lui-même, et cela pour une raison godforsaken fonctionne très bien ..

Répondre

0

Puisque vous êtes « dur codage "les valeurs pour le texte/cases à cocher via Javascript à l'exécution, le ViewState n'a aucune connaissance de ces valeurs étant définies et ainsi ils resteront vides après une actualisation ou une publication.

Vous remarquerez que Response.Redirect conserve vos valeurs car lorsque cette méthode serveur est appelée, elle parcourt tous les champs de formulaire et rassemble leurs valeurs pour les stocker dans ViewState et les repeupler lorsqu'elle revient la requête du serveur.

Avez-vous essayé de charger les valeurs initiales via la fonction Page_Load la première fois que l'utilisateur arrive à la page? Cela garantira que les valeurs sont stockées dans ViewState lorsque vous effectuez vos actions en fonction des actions contextuelles modales.

+0

Cela a du sens pour conserver les valeurs, mais le problème ici est que la case à cocher elle-même revient comme nulle ... comme si le contrôle n'existe pas, ce qui est impossible ... – NibblyPig

Questions connexes