【问题标题】:using class in list and session asp.net c#在列表和会话中使用类 asp.net c#
【发布时间】:2015-04-17 19:32:10
【问题描述】:

我正在尝试从数据库中获取数据并将其放入列表中。 然后,我想用接收到的数据创建下拉列表。

数据库表:

ID
projectName

代码:

public void ProjectsList()
{
    List<ProjectsListClass> ProjectsList=new List<ProjectsListClass>(); //list of projects
    ProjectsListClass projectDetails=new ProjectsListClass();//1 project details

    //creating session of projects table
    using (SqlConnection conn = new SqlConnection(mainDBConn))//connect to the database table
    {
        SqlCommand sqlProjectsList = new SqlCommand("SELECT * FROM dbo.Projects ORDER BY projectName", conn);

        conn.Open();

        SqlDataReader rsProjectsList = sqlProjectsList.ExecuteReader();

        if (rsProjectsList.HasRows && rsProjectsList.Read())//there is a project, insert into the array
        {
            projectDetails.ProjectsListProjectID = Convert.ToInt16(rsProjectsList["ID"]);
            projectDetails.ProjectsListProjectName = rsProjectsList["projectName"].ToString();
            ProjectsList.Add(projectDetails);
        }
        Session["ProjectsList"] = ProjectsList;

        rsProjectsList.Close();
        conn.Close();
    }  
}

在另一个页面中:

    List<ProjectsListClass>projectsArray=new List<ProjectsListClass>();
    projectsArray=(List<ProjectsListClass>)Session["ProjectsList"];

    foreach(var project in projectsArray)
    {
        ListItem l = new ListItem(project.ProjectsListProjectID.ToString()
            , project.ProjectsListProjectName.ToString()
            , true);
        projectIDDropDownList.Items.Add(l);
    }

我得到了错误:

对象引用未设置为对象的实例。

异常详细信息:System.NullReferenceException:没有对象引用 设置为对象的实例。

来源错误:

第 20 行:foreach(var project in projectsArray) - 这个是红色的

第 21 行:{ 第 22 行:ListItem l = new ListItem(project.ProjectsListProjectID.ToString()

我该怎么办?

【问题讨论】:

  • 使用调试器附件,悬停在上面可以看到哪个组件为空。可能其中一个属性未设置
  • ProjectsList() 在哪里调用?
  • 如果您不想出错,只需检查“其他页面”上的projectsArray 是否有类似这样的值:if(projectsArray.Any()){ // if yes - add items to dropdown }
  • 嗯,ProjectsList() 是“SiteMaster”页面中的一个方法。我在 page_load protected void Page_Load(object sender, EventArgs e) { ProjectsList();中调用它>

标签: c# asp.net


【解决方案1】:

我认为您需要注意一些事项。

虽然我不知道您的特殊要求,但一般来说,我不认为将您的项目列表存储在会话中是最好的方法。通常我会有一个带有 GetProjectList() 方法的项目类,它返回一个项目列表。然后,您可以从“其他”页面调用此方法并绑定到 DropDownList。

另外,我相信您的 projectDetails 声明可能在错误的位置。如果您想返回项目列表,请尝试类似这样的操作(我是 VB 开发人员,但我曾尝试过 C#)。

SqlCommand sqlProjectsList = new SqlCommand("SELECT * FROM dbo.Projects ORDER BY projectName", conn);

conn.Open();

SqlDataReader rsProjectsList = sqlProjectsList.ExecuteReader();

if (rsProjectsList.HasRows)//there is a project, insert into the array
{
   while rsProjectsList.Read()
   {
      ProjectsListClass projectDetails=new ProjectsListClass();
      projectDetails.ProjectsListProjectID = Convert.ToInt16(rsProjectsList["ID"]);
      projectDetails.ProjectsListProjectName = rsProjectsList["projectName"].ToString();
      ProjectsList.Add(projectDetails);
   }
}

rsProjectsList.Close();
conn.Close();

要绑定到您的下拉列表,请尝试以下代码,

projectIDDropDownList.DataSource = Project.GetProjects();
projectIDDropDownList.DataBind();

【讨论】:

  • 好的,谢谢,我可能会在我的网站上将它用于其他一些事情...谢谢大家的快速和良好的 cmets :)
猜你喜欢
  • 1970-01-01
  • 2017-10-07
  • 2012-09-20
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 2012-05-07
  • 2011-07-16
相关资源
最近更新 更多