asp.net Champ caché qui ne sauvegarde pas les valeurs lors de la mise à jour du code derrière

J'utilise un champ caché pour stocker la valeur sur la page. asp.net. Fondamentalement, j'ai défini la valeur du champ masqué chaque fois que la valeur dans le formulaire varie, c'est-à-dire le nom, la date, etc. Ce champ est sur un formulaire Web contenant une page principale et figure dans la section Contenu:


<asp:content contentplaceholderid="MainContent" id="Content2" runat="server">
<asp:hiddenfield id="hdnDirtyFlag" runat="server" value="false"></asp:hiddenfield>


Je change la valeur de champ dans javascript, Causer une fonction chaque fois qu'un événement onchange Fonctionne dans d'autres éléments de la gestion des formulaires Web:


<asp:textbox cssclass="niceInput" id="tbFirstName" maxlength="40" onchange="SetHiddenVariable//;" runat="server" width="150"></asp:textbox>
<script type="text/javascript">
function SetHiddenVariable// {
// Set the value of the hidden variable so we know a field has been updated
var hiddenControl = '<%= hdnDirtyFlag.ClientID %>';
document.getElementById/hiddenControl/.value = 'true';
}
</script>


Jusqu'à présent, tout va bien. Lorsque la page est chargée, la valeur de champ cachée est égale 'false', Et si je ne modifie pas de valeurs dans le formulaire Web, il reste faux. Chaque fois que je change l'autre élément de contrôle, la fonction est appelée. javascript et la valeur du champ caché est mise à jour pour 'true'. Et encore une fois tout cela parfaitement.

Après avoir envoyé le formulaire et mettre à jour la base de données, je vais installer la valeur de champ cachée à 'false' Dans le code derrière:


hdnDirtyFlag.Value = "false";


Mais lorsque j'appuie un autre bouton et que vous dessinez le compte à rebours, la valeur cachée du champ est toujours au niveau 'true'.

Quelqu'un peut-il expliquer pourquoi c'est le cas? J'ai traversé le code derrière et immédiatement après avoir changé la valeur que je vois la valeur 'false'. Sur la page là-bas asp:UpdatePanel, Mais le champ caché ne fait pas partie de ce panneau.

EDIT:

J'utilise ce code pour vérifier la valeur du champ dans le code pour le deuxième retour, après avoir été trouvée dans false À la dernière étape du premier retour. La valeur reste B. true Pour une raison quelconque de la deuxième transmission de rendement, après avoir été trouvée dans true à javascript du côté du client et ensuite retourné à false Dans le code derrière, comme indiqué ci-dessus:


if /hdnDirtyFlag.Value == "true"/
{
UpdateSecurityObject//;
}


</asp:content>
Invité:

Felix

Confirmation de:

Votre problème est que votre champ caché est en dehors du panneau de mise à jour. Malgré le fait que le panneau de mise à jour ait accès à toutes les commandes de la page pendant la transmission inverse /Comme il sert de retour régulier/, Il met à jour toutes les commandes du côté client des pages qui sont à l'extérieur ContentTemplate. Ainsi, votre code dans codebehind, Ce qui modifie la valeur du champ masqué n'affecte pas la valeur du côté du client. C'est pourquoi lorsque le bouton est enfoncé sur le bouton, il est toujours important. true.

Vous aurez besoin d'une/ Mettre un champ caché à l'intérieur UpdatePanel /Ou vous pouvez le mettre dans votre propre panneau avec UpdateMode, Installé sur toujours/; ou B./avoir une certaine javascript Du côté du client, qui est déclenché lorsque l'appel est terminé UpdatePanel, qui retourne la valeur false.

Gregoire

Confirmation de:

ViewState Enregistre la valeur, donc lors du redémarrage de la page ViewState a la signification true, alors asp.net Met à jour la valeur du contrôle avec true Avant d'afficher la page.

Change ton HiddenField sur ça:


<asp:hiddenfield enableviewstate="false" id="hdnDirtyFlag" runat="server" value="false"></asp:hiddenfield>


Ça fait mal asp.net Enregistrez la valeur de ce champ dans les messages inversés, car vous souhaitez qu'il soit installé dans false Chaque fois que la page est chargée.

Pour répondre aux questions, connectez-vous ou registre