【问题标题】:List being emptied on submit提交时清空列表
【发布时间】:2013-12-06 08:31:18
【问题描述】:

我有一个 C# 应用程序,我需要该列表来“记住”之前输入的内容。

http://oi40.tinypic.com/2ivhcuw.jpg

因此,一旦添加了与会者,如果添加了新与会者,之前的与会者将保留在列表中。目前它只显示最近的与会者,我希望他们保存,直到我决定清除它们(可能在会话中?)

List<Information> infoList = new List<Information>();
Information data = new Information();

firstName = resultEntry.Properties["givenname"].Value.ToString();
lastName = resultEntry.Properties["sn"].Value.ToString();
fullName = firstName + " " + lastName;

//data.CWID = resultEntry.Properties["username"].Value.ToString();
data.FullName = fullName;
// data.Email = resultEntry.Properties["email"].Value.ToString();

infoList.Add(data);

【问题讨论】:

  • 在 asp.net 中工作时,有几种方法可以“记住”一个属性,您可以将它放在会话或隐藏字段中。或者你可以在数据库中记住它,如果不使用,以后删除它
  • 您能详细说明一下吗?

标签: c# asp.net list


【解决方案1】:

用于将项目存储到会话中:

Session["MyInformation"] = data;

从会话中接收数据

List<information> data = (List<information>)Session["MyInformation"];

但请注意:会话应该被遗忘。

可能会考虑视图状态,但请注意:视图状态确实会使页面变慢。 (在添加视图状态时轻松测试 html 页面的大小)

最后一个选项可能是包含 cookie 以延长对项目的保留时间。

写一个cookie:http://msdn.microsoft.com/en-us/library/78c837bd(v=vs.100).aspx

读取 cookie:http://msdn.microsoft.com/en-us/library/bd70eh18(v=vs.100).aspx

另一种选择是将数据保存在数据库中 => 这意味着更多的流量。

(也是关于会话的一个小提示,将它们放在单独的静态类中,这样您就可以通过整个项目而不是一页来获取它们

public static class MySessions
{
    public static List<Information> MyData
    {
     get{
        //EDIT in the GET
        if(HttpContext.Current.Session["MyInformation"] != null)
          return (List<information>)HttpContext.Current.Session["MyInformation"];
        else
          {
          HttpContext.Current.Session["MyInformation"] = new List<Information>();
          return new List<Information>();
          } 
         }
     set{HttpContext.Current.Session["MyInformation"] = value;}
    }
}

编辑:

使用类如下:(它是一个静态类,通过输入类名后跟属性,您可以调用它而不是先实例化该类。

//Set the value from Somewhere
MySessions.MyData = new List<Information>();

//get the values from somewhere
var myInfo = MySessions.MyData;

【讨论】:

  • 感谢您的详细回答,我已按照您的建议将课程放入其中,但它返回错误“当前上下文中不存在名称会话”
  • @Corbin Spider:将 Session 更改为 HttpContext.Current.Session
  • @Scheure 感谢您清除了错误 - 现在我如何使用该类将数据存储/检索到列表中(对不起,我是新手!)
  • 编辑了答案:另请阅读 msdn.microsoft.com/en-us/library/79b3xss3.aspx 以使用静态类
  • 我在哪里使用:var myInfo = MySessions.MyData;我似乎没有提取存储的数据?它仍然只显示一位与会者@Schuere
【解决方案2】:

取决于“保存”持续时间的长短:

使用ViewState - 如果您希望列表在页面加载时为空(而不是回发)。 (即ViewState["data"] = infoList

使用Session - 如果您想根据某些条件手动清空列表。

【讨论】:

  • 谢谢,@Candide 那么这将如何应用于我的代码?在哪里初始化会话以及从会话中提取数据的位置?
  • 很好的答案,但您应该注意,如果您的列表很大,使用 Viewstate 会使页面加载变得混乱。
  • @Ethenyl 是的,但是,用户输入数千个条目的可能性很小。
  • @Candide 是的,但如果 slugginesh 发生,它应该在他的脑海中的某个地方^^
  • +1 表示乙烯,记住,一个页面包含多于一个列表
猜你喜欢
  • 2017-07-31
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多