web-dev-qa-db-fra.com

Comment accéder à viewstate en utilisant javascript?

J'essaie d'accéder à l'état d'affichage du côté client mais à l'exception suivante à venir: enter image description here

JAVASCRIPT:

<script language="javascript" type="text/javascript">
    var vCode = '<%=ViewState("code")%>';
    alert(dateView);
</script>

CODE DERRIÈRE:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ViewState("code") = "EE"
End Sub

Quelqu'un me suggère comment le faire?

15
Sukhjeevan

Je suggère d'utiliser RegisterHiddenField plutôt que de mélanger les codes serveur/js:

Vous pouvez essayer cet exemple:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ViewState("code") = "EE"
    Page.ClientScript.RegisterHiddenField("vCode", ViewState("code"))
End Sub

Sur votre javascript:

var vCode = document.getElementById("vCode");
alert(vCode);
16
jerjer

Vous pouvez simplement accéder à l'élément de formulaire caché qui contient l'état d'affichage.

Le nom du contrôle est __viewstate.

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="..." />

var vCode = documents.forms[0]['__VIEWSTATE'].Value;
alert(dateView);

Bien sûr, cela vous donnera l'état de vue crypté/encodé/compressé.

Si vous souhaitez en obtenir des valeurs spécifiques, il peut être préférable de les enregistrer dans des champs masqués et d'y accéder.

6
Oded

Le Page.ClientScript.RegisterHiddenField n'a pas fonctionné pour moi et a renvoyé null. Vous pouvez faire comme ça:

1-First solution: définissez un champ caché et assurez-vous de définir runat = server

  <input type="hidden"  id="myhiddenField" runat="server" value="" />

puis dans votre code, attribuez la valeur que vous souhaitez

 myhiddenField.Value= ViewState["name"].ToString();// or assign any value you want

dans votre javascript, accédez-y comme ceci:

 <script type="text/javascript">  
         function test() 
              {
                var name = document.getElementById('myhiddenField').value;
                alert(name)
             }
 </script>

solution en 2 secondes

Dans le cas où, pour certaines raisons, vous ne souhaitez pas avoir de contrôle d'entrée du serveur, vous pouvez mettre le champ masqué dans une balise littérale

<asp:literal id="literal1" runat="server"><input type="hidden" id="myhiddenField" value="{0}"/></asp:literal>

puis attribuer une valeur au littéral dans codebehind comme celui-ci

literal1.Text = string.Format(literal1.Text, "somevalue");  // somevlue can be your ViewState value

puis accédez-y en javascript comme d'habitude

   var name = document.getElementById('myhiddenField').value;
            alert(name)

Remarque: si vous utilisez des panneaux de mise à jour, placez les champs cachés dans la balise contenttemplate du panneau de mise à jour

6
Niloofar