2013-10-16 102 views
0

我需要将一些列表存储到ViewState中。将多个列表保存到ViewState

我创建了一个类:

[Serializable] 
    public class TemplateTypeProcedureListViewState 
    { 
     public string Name { get; set; } 
     public string ProcedureName { get; set; } 
     public string ProcedureParameter { get; set; } 
     public string ProcedureParameterType { get; set; } 
    } 

这里是ViewState的:

private TemplateTypeProcedureListViewState TemplateTypeProcedureList 
    { 
     get { return (TemplateTypeProcedureListViewState)ViewState["TemplateTypeProcedureList"]; } 
     set { ViewState["TemplateTypeProcedureList"] = value; } 
    } 

我给的值是这样的:

var templateTypeProcedureListViewState = new TemplateTypeProcedureListViewState 
    { 
     Name = ListNameTextBox.Text, 
     ProcedureName = ListProcedureNameTextBox.Text, 
     ProcedureParameter = ListProcedureParameterTextBox.Text, 
     ProcedureParameterType = ListProcedureParameterTypeTextBox.Text 
    };     

    ViewState.Add("TemplateTypeProcedureList", templateTypeProcedureListViewState); 

现在,当我再添项目,第一个被覆盖(或删除,另一个(第二个)被保存)。是否有可能将多个项目保存到ViewState中?你能介绍一些东西或某处吗?谢谢:)

+0

添加具有不同名称(关键)的项目。 –

回答

2

好吧,发生这种情况是因为你保存你的新项目在Viestate中,你不添加一个项目保存在视图状态列表。

你必须先检索列表,然后才添加项目,然后将其保存。

var list = TemplateTypeProcedureList.Add(new item); 
TemplateTypeProcedureList = list; 

PS:这不是使用viestate的最佳方式,因为您的页面会变得越来越大。尽量避免在ViewState上保存很多信息。

+0

我只需要将这些信息暂时保存,因为我需要在GridView中显示它们。但问题是我使用List <>,点击Add按钮后,GridView中显示的信息。但是,再次点击该按钮之后,先前的信息被删除,并且只显示新的信息。有人告诉我使用ViewState,所以现在我试图找出一些东西。感谢您的帮助:) – etritb

+0

PS。在GridView中显示的信息将在刷新页面后清除,因此不用担心;) – etritb

+0

欢迎您,这只是一个建议,您并不需要绝对遵守它。如果有帮助,不要忘记将其标记为答案。 –