web-dev-qa-db-ja.com

JavaScriptを使用してビューステートにアクセスする方法は?

私はクライアント側でビューステートにアクセスしようとしていますが、次の例外が来ています: enter image description here

JAVASCRIPT:

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

コードの背後:

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

誰も私にそれを行う方法を提案しますか?

15
Sukhjeevan

Server/jsコードを混在させるよりもRegisterHiddenFieldを使用することをお勧めします。

このサンプルを試すことができます:

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);
16
jerjer

ビューステートを保持する非表示のフォーム要素に簡単にアクセスできます。

コントロールの名前は__viewstate

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

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

もちろん、これは暗号化/エンコード/圧縮されたビューステートを提供します。

特定の値が必要な場合は、非表示フィールドに記録してアクセスする方が良い場合があります。

6
Oded

Page.ClientScript.RegisterHiddenFieldが機能せず、nullを返しました。このようにすることができます:

1-First solution:隠しフィールドを定義し、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-Secondソリューション

何らかの理由でサーバー入力コントロールが必要ない場合は、リテラルタグに非表示フィールドを配置できます

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

そして、このようなコードビハインドのリテラルに値を割り当てます

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

その後、通常どおりJavaScriptでアクセスします

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

注:更新パネルを使用している場合は、updatepanelのcontenttemplateタグ内に非表示フィールドを配置します

6
Niloofar