gpt4 book ai didi

c# - 用于 ViewState 存储的可序列化类对象在 c# ASP.net 中不起作用

转载 作者:行者123 更新时间:2023-11-30 16:59:04 25 4
gpt4 key购买 nike

我创建了一个面板来存储我的列表框,我的目标是在我按下页面上的按钮控件时动态添加新的列表框。

我创建了一个继承 List 类的 MyList 类,并且应用了 [Serializable] 标签。我已应用序列化将对象存储在 View 状态中。

MyList 类将存储所有动态创建的列表框。

问题:

  • 当代码运行时,页面加载但是当我点击按钮存储列表的 View 状态时出现错误,这是怎么回事?
  • 据我所知,我只需要序列化 ​​MyList 类以将其存储在 View 状态,这是正确的吗?
  • 是否也需要序列化MyList的基类(List)?

    public partial class _default : System.Web.UI.Page
    {
    MyList<ListBox> myList;

    protected void Page_Load(object sender, EventArgs e)
    {
    myList = new MyList<ListBox>();
    myList.Add(new ListBox());
    Panel1.Controls.Add(myList[0]);
    Button1.Click += Add_ListBox1;
    }

    public void Add_ListBox1(object sender, EventArgs e)
    {
    ListBox temp_listBox = new ListBox();
    myList.Add(temp_listBox);
    Panel1.Controls.Add(temp_listBox);
    ViewState["ListBox_list"] = myList;
    }
    }

    [Serializable]
    public class MyList<ListBox> : List<ListBox>
    {

    }

页面在点击前加载:

enter image description here

点击按钮后的错误消息: enter image description here

最佳答案

虽然您已经将您的类标记为 [serializable],但它依赖于不可序列化的 ListBox。

我用谷歌搜索了一下,找到了 this这可能会有所帮助,尽管它看起来比我预期的要复杂得多。

几个快速的想法:

  • 动态内容是 WebForms 中的弱点之一,因为如您所见,动态内容在回发后丢失,因此必须以某种方式保留和重新创建。在这些情况下,我尝试消除回发并更多地依赖 JavaScript,以便浏览器永远不会被重置......这是新 MVC 模型闪耀的地方之一,因为它不会一直与你作斗争(作为 postpack模型无意中做了)。实际上,这种痛苦是促使我们转向单页应用程序的主要因素之一。

  • 您最好编写自己的类,其中包含您关心的关于这些列表框的内容,例如位置及其内容(希望只是一些简单的字符串),然后将其序列化...然后编写您自己的类将它们反序列化为列表框的代码。

顺便说一句,没有什么反对网络表单的,我现在在另一个窗口中打开了一个!

关于c# - 用于 ViewState 存储的可序列化类对象在 c# ASP.net 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24344819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com