我使用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; }
}
问题是否确实对另一方有任何益处?
答案 0 :(得分:1)
我建议做第一个例子,即使它可能更多的输入。
它有两个明显的优点:
第一个是Michael Liu所说的,即ViewState的大小更具粒度。如果您只使用10个属性中的2个,那么您的ViewState大小仅占您实际分配给的2个。
我认为更重要的第二个是它遵循相同的UserControl模式,因为它们具有您分配的属性。例如,给定具有Text
属性的UserControl,使用ASPX中的用户控件将如下所示:
<demo:MyUserControl Text="Some Text" runat="server" />
哪个也适用于设计师。因此,对于以下约定,有一些事情可以说,(大多数情况下)属性在回发之间保持不变。