JavaScript从viewstate获取自定义对象

时间:2015-01-29 14:28:15

标签: javascript asp.net viewstate

我很确定此问题之前会被提出但我找不到所以请将链接发布到我可以去的地方,如果是这样的话。

但是,我使用ViewState在asp.net中的Postback上保留了一些数据。 ViewState包含我自己的自定义对象的集合。 e.g。

 ViewState["List"] as List<Animal>

我有可能获得此列表并将其传递给客户端吗?真的,可以序列化吗?

我试过了:

// HTML
<asp:TextBox ID="theList" runat="server" style="display:none"></asp:TextBox> 

 //Sever Side
theList.Text = ViewState["List"].Tostring();

//JS
document.getElementById('theList').innerText;

但当然,这不是我包含命名空间的数据。

我的第一个想法是在客户端上使用JSON.Parse,但是我需要首先传递数据,这是主要问题。

由于

2 个答案:

答案 0 :(得分:1)

user3428422没错(他/她打败了我的帖子)。您可能还会考虑:

    public List<Animal> AnimalList
    {
        get
        {
            if (!(ViewState["lAnimalList"] is List<Animal>))
            {
                ViewState["lAnimalList"] = new List<Animal>();
            }
            return (List<Animal>)ViewState["lAnimalList"];
        }
    }

然后在你的Page_Load事件中有:

        JavaScriptSerializer jss = new JavaScriptSerializer();
        HiddenField.Value = jss.Serialize(AnimalList);

虽然有同样的想法。您应该首先奖励user3428422。

答案 1 :(得分:0)

好的,我只是在服务器端使用了JavaScriptSerializer

 var serializer = new JavaScriptSerializer();
 var serializedResult = serializer.Serialize(ViewState["List"]);

然后将其传输到隐藏字段

hiddenField.Value = serializedResult; 

现在所有的数据都是在cilent上的JSON格式,如果你愿意,你可以对它进行反序列化