每个变量的ViewState与一个变量

时间:2014-02-24 15:56:04

标签: c# asp.net viewstate

我使用viewstate来存储一些需要在回发上持久保存的标志和小数据。 大部分时间我都这样使用它

public partial class testPage : System.Web.UI.Page
{
    public string item1 { get { return (string)(ViewState["item1"] ?? default(string)); } set { ViewState["item1"] = value; } }
    public string item2 { get { return (string)(ViewState["item2"] ?? default(string)); } set { ViewState["item2"] = value; } }
    public string item3 { get { return (string)(ViewState["item3"] ?? default(string)); } set { ViewState["item3"] = value; } }
    public bool flag1 { get { return (bool)(ViewState["flag1"] ?? default(bool)); } set { ViewState["flag1"] = value; } }
    public bool flag2 { get { return (bool)(ViewState["flag2"] ?? default(bool)); } set { ViewState["flag2"] = value; } }   

    protected void Page_Load(object sender, EventArgs e)
    {
       // flag1...
    }
}

这很好,但看起来有点沉重,我不确定desirialization过程只发生一次或每次访问变量。 所以我认为这种技术在性能和管理方面可能会更好一些

public partial class testPage : System.Web.UI.Page
{
    public PageVeriables Variables { get { return (PageVeriables)(ViewState["Variables"] ?? default(PageVeriables)); } set { ViewState["Variables"] = value; } }    

    protected void Page_Load(object sender, EventArgs e)
    {
      //Variables.flag1..
    }
}

[Serializable]
public class PageVeriables
{
    public string item1 { get; set; }
    public string item2 { get; set; }
    public string item3 { get; set; }
    public bool flag1 { get; set; }
    public bool flag2 { get; set; }
}

问题是否确实对另一方有任何益处?

1 个答案:

答案 0 :(得分:1)

我建议做第一个例子,即使它可能更多的输入。

它有两个明显的优点:

第一个是Michael Liu所说的,即ViewState的大小更具粒度。如果您只使用10个属性中的2个,那么您的ViewState大小仅占您实际分配给的2个。

我认为更重要的第二个是它遵循相同的UserControl模式,因为它们具有您分配的属性。例如,给定具有Text属性的UserControl,使用ASPX中的用户控件将如下所示:

<demo:MyUserControl Text="Some Text" runat="server" />

哪个也适用于设计师。因此,对于以下约定,有一些事情可以说,(大多数情况下)属性在回发之间保持不变。