2011-05-02 63 views
3

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

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

<%@ 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> 

和代码:

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); 
     } 
    } 
} 

串的 “选择” 值为null我选择一个后列表框中的项目。

回答

7

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

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

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

正常工作...谢谢:) – 2011-05-02 17:05:23

6

您需要在此条件下添加列表项; !Page.IsPostBack。因为在调用选定的索引更改事件之前,首先发生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。

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

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

0
protected void Page_Load(object sender, EventArgs e) {  
    if(!IsPostBack) 
    listBoxLoad(); 
} 

因为,你的列表框autopostback=true和您的列表框中单击BE回传和listBoxLoad重装,指数变化。

+0

感谢您花时间提供答案。这是因为像你这样有帮助的同伴,我们可以一起学习社区。这里有一些关于如何让你的答案很好的技巧:[我如何写出一个好答案](https://stackoverflow.com/help/how-to-answer)。 – Brien 2018-02-17 03:11:49