私はクライアント側でビューステートにアクセスしようとしていますが、次の例外が来ています:
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
誰も私にそれを行う方法を提案しますか?
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);
ビューステートを保持する非表示のフォーム要素に簡単にアクセスできます。
コントロールの名前は__viewstate
。
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="..." />
var vCode = documents.forms[0]['__VIEWSTATE'].Value;
alert(dateView);
もちろん、これは暗号化/エンコード/圧縮されたビューステートを提供します。
特定の値が必要な場合は、非表示フィールドに記録してアクセスする方が良い場合があります。
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タグ内に非表示フィールドを配置します