【问题标题】:Selected item in list box is null列表框中的选定项为空
【发布时间】:2011-08-17 02:57:01
【问题描述】:

列表框中的项目很少。当我选择一个项目时,我将它存储在一个字符串中以供进一步使用,但是当我显示该字符串值时,它显示为 null。

下面是我的 Invitee.aspx 文件的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Invitee.aspx.cs" Inherits="FinalProj2.Invitee" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:DropDownList ID="DropDownList1" runat="server">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList2" runat="server">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList3" runat="server">
        </asp:DropDownList>
&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:DropDownList ID="DropDownList4" runat="server">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList5" runat="server">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList6" runat="server">
        </asp:DropDownList>

    </div>
    <asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true" Height="310px" 
        onselectedindexchanged="ListBox1_SelectedIndexChanged" Width="271px">
    </asp:ListBox>
    <asp:TextBox ID="TextBox1" runat="server" Height="217px" Width="544px"></asp:TextBox>
    </form>
</body>
</html>

Invitee.aspx.cs 的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace FinalProj2
{
    public partial class Invitee : System.Web.UI.Page
    {
        FinalProj2.Models.DataClasses1DataContext db = new FinalProj2.Models.DataClasses1DataContext();

        protected void Page_Load(object sender, EventArgs e)
        {

            for (int i = 1; i < 13; i++)
            {
                DropDownList1.Items.Add(new ListItem(i.ToString()));
                DropDownList4.Items.Add(new ListItem(i.ToString()));
            }

            for (int i = 1; i < 32; i++)
            {
                DropDownList2.Items.Add(new ListItem(i.ToString()));
                DropDownList5.Items.Add(new ListItem(i.ToString()));
            }

            for (int i = 2010; i < 2021; i++)
            {
                DropDownList3.Items.Add(new ListItem(i.ToString()));
                DropDownList6.Items.Add(new ListItem(i.ToString()));
            }


            var query = from emp in db.Employees
                        select emp.Employee_Name;

            ListBox1.DataSource = query;
            ListBox1.DataBind();
        }

        protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Response.Write("Hello");

            string selected = ListBox1.SelectedValue.ToString();

            Response.Write("\n Selected Value is" + selected);

            var query = from emp in db.Employees
                        where emp.Employee_Name == selected
                        select emp.Employee_ID;

            Response.Write(query);

            //int empid = query.First();

            //var query1 = from meet_emp in db.Meet_Emps
            //             where meet_emp.Employee_ID == empid
            //             select meet_emp.Meeting_ID;

            //int meetid = query1.First();

            //Response.Write(meetid);
        }
    }
}

当我在列表框中选择一个项目后,字符串“selected”的值为空。

【问题讨论】:

    标签: c# .net asp.net listbox


    【解决方案1】:

    这是因为您在每个周期都运行ListBox1.DataBind()。改为:

    if (!IsPostBack)
    {
        var query = from emp in db.Employees
                    select emp.Employee_Name;
    
        ListBox1.DataSource = query;
        ListBox1.DataBind();
    }
    

    【讨论】:

      【解决方案2】:

      这种情况下需要添加列表项; !Page.IsPostBack。因为在调用 selected Index Change 事件之前,首先会发生 Page PostBack 事件,并且您的选择将消失。

      if(!Page.IsPostBack)
      {
      for (int i = 1; i < 13; i++)
              {
                  DropDownList1.Items.Add(new ListItem(i.ToString()));
                  DropDownList4.Items.Add(new ListItem(i.ToString()));
              }
      
              for (int i = 1; i < 32; i++)
              {
                  DropDownList2.Items.Add(new ListItem(i.ToString()));
                  DropDownList5.Items.Add(new ListItem(i.ToString()));
              }
      
              for (int i = 2010; i < 2021; i++)
              {
                  DropDownList3.Items.Add(new ListItem(i.ToString()));
                  DropDownList6.Items.Add(new ListItem(i.ToString()));
              }
      
      
              var query = from emp in db.Employees
                          select emp.Employee_Name;
      
              ListBox1.DataSource = query;
              ListBox1.DataBind();
      }
      

      【讨论】:

        【解决方案3】:

        正如您在ASP.NET Page Life Cycle Overview 中看到的,Page_Load 将首先执行,然后是 SelectedIndexChanged 事件。

        你只需要执行一次绑定DropDownList的代码,因为ViewState。其余的请求将是 PostBack。因此,您需要验证添加条件 if(!Page.IsPostBack)

        您需要定义 DataValueField(对象的哪个字段将是值)和 DataTextField(对象的哪个字段将对用户可见)。

        【讨论】:

          【解决方案4】:
          protected void Page_Load(object sender, EventArgs e) {    
             if(!IsPostBack)
             listBoxLoad();
          }
          

          因为,您的列表框autopostback=true 和您单击的列表框被回发,并且 listBoxLoad 再次重新加载并且索引已更改。

          【讨论】:

          • 感谢您抽出宝贵时间提供答案。正是因为像您这样乐于助人的同龄人,我们才能作为一个社区一起学习。以下是一些关于如何使您的答案出色的提示:How do I write a good answer
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-28
          • 2023-04-01
          相关资源
          最近更新 更多