Как получить доступ к viewstate с помощью javascript?

Я пытаюсь получить доступ к представлению состояния на стороне клиента, но после следующего исключения: enter image description here

JAVASCRIPT:

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

CODE BEHIND:

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

Кто-нибудь подскажет мне, как это сделать?

Ответ 1

Я бы предложил использовать RegisterHiddenField, чем смешивать коды сервера /js:

Вы можете попробовать этот образец:

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

На вашем javascript:

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

Ответ 2

Страница .ClientScript.RegisterHiddenField не работает для меня и возвращает null. Вы можете сделать следующее:

1-первое решение: определите скрытое поле и убедитесь, что вы установили runat = server

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

а затем в вашем коде присваивать любое значение, которое вы хотите ему

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

в вашем javascript доступ к нему выглядит следующим образом:

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

2-секундное решение

Если по каким-то причинам вы не хотите иметь управление доступом к серверу, вы можете поместить скрытое поле в литеральный тег

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

а затем присвойте значение литералу в codebehind, как этот

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

затем запустите его в javascript как обычно

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

Примечание. Если вы используете панели обновлений, поместите скрытые поля внутри тега contenttemplate панели обновления

Ответ 3

Вы можете просто получить доступ к скрытому элементу формы, который содержит представление.

Название элемента управления __viewstate.

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

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

Конечно, это даст вам зашифрованное/закодированное/сжатое представление.

Если вам нужны определенные значения, вам может быть лучше записать их в скрытые поля и получить доступ к ним.