保留aspx页面的属性值的最佳做法是什么?
我做了以下工作,是否有一些更简洁的方法?
public string DataTable
{
get
{
return _DataTable;
}
set
{
_DataTable = value;
ViewState["DataTable"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable = Request["dataTable"].ToString();
}
else
{
DataTable = ViewState["DataTable"].ToString();
}
}
答案 0 :(得分:5)
你有多个地方可以保存数据,每个地方都有自己的优点和缺点,并且拥有自己的生命周期:
ViewState - 在每个页面上单独存储为客户端上的隐藏(稍微加密)项目。请记住,数据必须往返于客户端并返回每个回发,因此通常情况下,存储大量数据并不是一个好的方法
HiddenItem - 隐藏的输入控件。与ViewState的工作方式相同,除了它没有被enrypted,你可以使用客户端JS中的值
QueryString - 与hiddenitem相同,但严重的是,仅将其用于小型数据。我认为某些浏览器对URL长度有限制
会话 - 具有能够存储更大数据量的优势,因为它存储在服务器端,而不是客户端。如果客户端使用浏览器上的后退/下一步按钮,您可能会遇到麻烦,并且需要小心维护服务器场中的会话数据(即运行相同Web应用程序的多个服务器)
缓存 - 几乎与Session相同,但您可以从其他会话访问它。这更适合用于“全局”可访问数据(即每个人在你的app中使用的东西)
静态属性 - 与缓存的工作原理相同,但是您无法通过webfarms共享它,因此webfarm的每个成员都会在其加载的程序集中拥有自己的静态值。
答案 1 :(得分:1)
我会这样做:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
TableName = Request.QueryString["tableName"];
}
public string TableName
{
get { return ViewState["tableName"] as string; }
set { ViewState["tableName"] = value; }
}
我不喜欢单独使用Request [“tableName”],因为它必须在更多地方搜索。通常我知道我在哪里发送参数。
DataTable也是一种类型,因此最好不要将它用作属性名称。