asp.net 在回发之间保留列表值
asp.net retain list values between postbacks
大家好,提前致谢,
我在我的 .cs 文件中创建了一个 class,然后像这样声明了一个列表<>...
public partial class MyClass : System.Web.UI.Page
{
public List<PrecioStock> PreciosYStocks = new List<PrecioStock>();
protected void Page_Load(object sender, EventArgs e)
{
...
...
public class PrecioStock
{
public string Precio;
public string Stock;
public PrecioStock(string Precio, string Stock)
{
this.Precio = Precio;
this.Stock = Stock;
}
public void SetPrecio(string nuevoPrecio)
{
this.Precio = nuevoPrecio;
}
public void SetStock(string nuevoStock)
{
this.Stock = nuevoStock;
}
public string GetPrecio()
{
return this.Precio;
}
public string GetStock()
{
return this.Stock;
}
}
然后,我用一些文本框的文本这样填充它...
PreciosYStocks.Clear();
foreach (ListItem items in ControlListaGenerico.Items)
{
if (items.Selected)
{
for (int i = 0; i < TablaDeDatos.Rows.Count; i++)
{
if(items.Value.Equals(TablaDeDatos.Rows[i]["ID_FORMATO"].ToString()))
{
TextBox Precio = (TextBox)Precio_Stock_PN.FindControl("NuevoPrecioTB_" + items.Value);
Precio.Text = TablaDeDatos.Rows[i]["PRECIO"].ToString();
TextBox Stock = (TextBox)Precio_Stock_PN.FindControl("NuevoStockTB_" + items.Value);
Stock.Text = TablaDeDatos.Rows[i]["STOCK"].ToString();
PreciosYStocks.Add(new PrecioStock(Precio.Text, Stock.Text));
break;
}
}
}
}
嗯,看起来填的不错,但是问题是当我点击DetailsView的UPDATE按钮时,这会产生一个回发事件,数据丢失了,我无法再访问它了.
那么,回发后如何访问它?我的意思是,让它持久。
我已经阅读了有关 "viewState" 和 "Session" 的方法,但不知道如何实施它们,以防它们是这个问题的答案。
请再次帮助并感谢。
如果数据不是太大(在你的情况下它不是很多数据)那么你可以将它写入页面的 ViewState
。这样它就会在每次回发时提交回来。如果您将它存储在 Session
中,那么您最终会在 Session
中存储大量数据,这些数据可能再也不需要了。
这是模式。
- 创建一个 class 来表示您需要存储的任何数据。 (你可以有不止一个,但一个更简单。)
- 存储你需要坚持的任何东西class。
- 在
PreRender
事件中,当页面修改完成后,您将 class 写入 ViewState
。
在Load
事件中你读回了它。如果没有什么可读的(这是第一页加载),那么你创建一个新的 class 实例。
public partial class YourPage: System.Web.UI.Page
{
private PageState _pageState;
protected void Page_Load(object source, EventArgs e)
{
_pageState = ViewState["pageState"] as PageState ?? new PageState();
}
protected void Page_PreRender(object sender, EventArgs e)
{
ViewState["pageState"] = _pageState;
}
}
[Serializable]
public class PageState
{
//Whatever data you need to persist
}
大家好,提前致谢,
我在我的 .cs 文件中创建了一个 class,然后像这样声明了一个列表<>...
public partial class MyClass : System.Web.UI.Page
{
public List<PrecioStock> PreciosYStocks = new List<PrecioStock>();
protected void Page_Load(object sender, EventArgs e)
{
...
...
public class PrecioStock
{
public string Precio;
public string Stock;
public PrecioStock(string Precio, string Stock)
{
this.Precio = Precio;
this.Stock = Stock;
}
public void SetPrecio(string nuevoPrecio)
{
this.Precio = nuevoPrecio;
}
public void SetStock(string nuevoStock)
{
this.Stock = nuevoStock;
}
public string GetPrecio()
{
return this.Precio;
}
public string GetStock()
{
return this.Stock;
}
}
然后,我用一些文本框的文本这样填充它...
PreciosYStocks.Clear();
foreach (ListItem items in ControlListaGenerico.Items)
{
if (items.Selected)
{
for (int i = 0; i < TablaDeDatos.Rows.Count; i++)
{
if(items.Value.Equals(TablaDeDatos.Rows[i]["ID_FORMATO"].ToString()))
{
TextBox Precio = (TextBox)Precio_Stock_PN.FindControl("NuevoPrecioTB_" + items.Value);
Precio.Text = TablaDeDatos.Rows[i]["PRECIO"].ToString();
TextBox Stock = (TextBox)Precio_Stock_PN.FindControl("NuevoStockTB_" + items.Value);
Stock.Text = TablaDeDatos.Rows[i]["STOCK"].ToString();
PreciosYStocks.Add(new PrecioStock(Precio.Text, Stock.Text));
break;
}
}
}
}
嗯,看起来填的不错,但是问题是当我点击DetailsView的UPDATE按钮时,这会产生一个回发事件,数据丢失了,我无法再访问它了.
那么,回发后如何访问它?我的意思是,让它持久。
我已经阅读了有关 "viewState" 和 "Session" 的方法,但不知道如何实施它们,以防它们是这个问题的答案。
请再次帮助并感谢。
如果数据不是太大(在你的情况下它不是很多数据)那么你可以将它写入页面的 ViewState
。这样它就会在每次回发时提交回来。如果您将它存储在 Session
中,那么您最终会在 Session
中存储大量数据,这些数据可能再也不需要了。
这是模式。
- 创建一个 class 来表示您需要存储的任何数据。 (你可以有不止一个,但一个更简单。)
- 存储你需要坚持的任何东西class。
- 在
PreRender
事件中,当页面修改完成后,您将 class 写入ViewState
。 在
Load
事件中你读回了它。如果没有什么可读的(这是第一页加载),那么你创建一个新的 class 实例。public partial class YourPage: System.Web.UI.Page { private PageState _pageState; protected void Page_Load(object source, EventArgs e) { _pageState = ViewState["pageState"] as PageState ?? new PageState(); } protected void Page_PreRender(object sender, EventArgs e) { ViewState["pageState"] = _pageState; } } [Serializable] public class PageState { //Whatever data you need to persist }