c# - asp.net 在回发之间保留列表值

标签 c# asp.net variables postback

大家好,提前致谢

我在我的 .cs 文件中创建了一个类,然后像这样声明了一个列表<>...

    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 的更新按钮时,这会生成一个回发事件,数据丢失并且我无法再访问它。

那么,回发后如何访问它呢?我的意思是,让它持久化。

我读过有关“viewState”和“Session”的方法,但不知道如何实现它们,以防它们是这个问题的答案。

请帮助并再次感谢。

最佳答案

如果数据不是太大(在您的情况下数据不是很多),那么您可以将其写入页面的 ViewState。这样它就会在每次回发时提交回来。如果您将它存储在 Session 中,那么您最终会在 Session 中存储大量可能永远不需要的数据。

这是模式。

  • 创建一个代表您需要存储的任何数据的类。 (您可以拥有多个,但一个更简单。)
  • 存储您在该类(class)中坚持使用的任何内容。
  • 在页面修改完成后的 PreRender 事件中,将您的类写入 ViewState
  • Load 事件中,您读回它。如果没有什么可读的(这是第一页加载),那么您将创建一个新的类实例。

    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
    }
    

关于c# - asp.net 在回发之间保留列表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36518086/

相关文章:

c# - 使用.NET将多个ogg vorbis文件顺序连接到一个文件中?

从数据库生成的 C# SEO URL

asp.net - "ASP.NET Membership is disabled in this template"- vs2013 Web 表单模板

c# - 我如何从子页面编辑母版页 div?

iphone - Objective-c:在数组内分配变量而不是字符串

c# - 使用 Linq 重新排列表数据

javascript - 如何在 Blazor 中模拟 setTimeout()?

asp.net - 无法在 Sitecore 8.1 项目中加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions

Java类变量个数

javascript - "function foo(bar) { }"与 "foo = function(bar) { }"