如何使用javascript访问viewstate?

Suk*_*van 15 javascript asp.net viewstate

我试图在客户端访问视图状态但是在出现异常后: 在此输入图像描述

JAVASCRIPT:

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

代码背后:

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

有谁建议我怎么做?

jer*_*jer 16

我建议使用RegisterHiddenField而不是混合server/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
Run Code Online (Sandbox Code Playgroud)

在你的JavaScript上:

var vCode = document.getElementById("vCode");
alert(vCode);
Run Code Online (Sandbox Code Playgroud)

  • var vCode = document.getElementById("vCode"); 警报(vCode.value); (2认同)

Ode*_*ded 6

您只需访问包含视图状态的隐藏表单元素即可.

控件的名称是__viewstate.

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

var vCode = documents.forms[0]['__VIEWSTATE'].Value;
alert(dateView);
Run Code Online (Sandbox Code Playgroud)

当然,这将为您提供加密/编码/压缩的视图状态.

如果您需要特定值,您可能会发现将它们记录在隐藏字段中并访问它们会更好.


Nil*_*far 6

Page.ClientScript.RegisterHiddenField对我不起作用并返回null.你可以这样做:

1-First解决方案: 定义隐藏字段并确保设置runat = server

  <input type="hidden"  id="myhiddenField" runat="server" value="" />
Run Code Online (Sandbox Code Playgroud)

然后在你的代码后面分配你想要的任何值

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

在你的JavaScript中访问它像这样:

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

2秒解决方案

如果由于某些原因您不想拥有服务器输入控件,则可以将隐藏字段放在文字标记中

<asp:literal id="literal1" runat="server"><input type="hidden" id="myhiddenField" value="{0}"/></asp:literal>
Run Code Online (Sandbox Code Playgroud)

然后像这样在代码隐藏中为文字赋值

literal1.Text = string.Format(literal1.Text, "somevalue");  // somevlue can be your ViewState value
Run Code Online (Sandbox Code Playgroud)

然后像往常一样在javascript中访问它

   var name = document.getElementById('myhiddenField').value;
            alert(name)
Run Code Online (Sandbox Code Playgroud)

注意:如果您使用的是更新面板,请将隐藏字段放在updatepanel的contenttemplate标记内