我正在开始开发一个C#/ ASP.net网络应用程序,我在其中使用实体框架(Microsoft ORM)。
我的问题非常简单: 在我的default.aspx.cs中,我有这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Projet___TestConnaissances
{
public partial class _Default : System.Web.UI.Page
{
protected List<Theme> lt = new List<Theme>();
protected List<int> li = new List<int>();
protected Theme th = new Theme();
protected String test = "teeeest";
protected int v = 1;
protected void Page_Load(object sender, EventArgs e)
{
DataSourceContainer bdd = new DataSourceContainer();
var requete = from Theme in bdd.ThemeSet select Theme;
List<Theme> lt = requete.ToList(); // gets a list of themes
v = lt.Count(); // puts in v the number of themes in lt
th = lt.First(); // variable containing a unique theme (first of lt)
test = "Ceci est un test";
li.Add(1);
li.Add(2);
li.Add(3);
}
}
}
在我的default.aspx中,我显示了这个:
<p>
<br />test : <%= test %>
<br />v : <%= v %>
<br />th.libelle : <%= th.libelle %>
<br />lt.count : <%= lt.Count() %>
<br />li.count : <%= li.Count() %>
</p>
结果,我有:
test : Ceci est un test
v : 3
th.libelle : Test ajout libelle
lt.count : 0
li.count : 3
正如你所看到的,我的主题列表在显示之前被莫名其妙地重新初始化。 奇怪的是,我的List of int得到妥善保存,以及包含唯一主题的变量。
使用实体设计器创建的Theme类,也许这与int的列表有区别?
提前感谢那些帮助我弄清楚那里发生了什么的人。 再见!
答案 0 :(得分:3)
您的Page_Load
方法声明了名为lt
的新变量。它没有为实例变量赋值,因为局部变量正在遮蔽实例变量。所以这个:
List<Theme> lt = requete.ToList();
应该是这样的:
lt = requete.ToList();
我还建议使用更有意义的变量名称:)
答案 1 :(得分:0)
您正在重新定义page_load;
中方法范围中的变量List<Theme> lt = requete.ToList(); // gets a list of themes
改为使用;
lt = requete.ToList(); // gets a list of themes