2011-08-15 98 views
0

我放在一个下拉列表,在我的ASP页面下拉列表onselectedIndexChanged问题

<asp:DropDownList ID="authorList" runat="server"  
    OnSelectedIndexChanged="authorList_Changed" AutoPostBack="true" 
    ></asp:DropDownList> 

然后在代码隐藏,我把它绑定到一个数据库归档再火的SelectedIndexChanged

protected void Page_Load(object sender, EventArgs e) 
    { 

     var a = (from s in p.Authors 
       select s.FirstName); 
     authorList.DataSource = p.Authors; 
     authorList.DataTextField = "Firstname"; 
     authorList.DataValueField = "FirstName"; 
     authorList.DataBind(); 
     authorList.SelectedIndexChanged += new EventHandler(authorList_Changed); 
     var q = (from s in p.Authors 
       where s.FirstName.Contains("m") 
       select s); 
     Grid1.DataSource = q; 
     Grid1.DataBind(); 
     // authorList.DisplayMember = "FirstName"; 
    } 
    public void authorList_Changed(Object sender, EventArgs e) 
    { 
     //Author a = (Author) authorList.SelectedItem; 
     var a = authorList.SelectedValue; 
     var v = authorList.SelectedItem; 
     var q2 = (from s in p.Authors 
        from w in p.Payrolls 
        where authorList.SelectedValue == s.FirstName 
        where s.AuthorID == w.AuthorID 
        select w); 
     List<Payroll> d = q2.ToList(); 
     if (d.Count > 0) 
     { 
      payroltextbox.Text = d.First().PayrollID.ToString(); 
      //authorList.DataBind(); 
     } 
     else 
      payroltextbox.Text = ""; 
      // authorList.DataBind(); 

    } 
    PublishingCompanyEntities p = new PublishingCompanyEntities(); 

但问题一直当我的下拉列表有值时说1 2 3 4 ....... 1带来默认.......所以,当我选择4它仍然返回1在回发和返回值相关的文本框(payroltextbox)与1 ..你可以请帮助我.....

回答

1

这是因为你忘了检查Page.IsPostback在Page_Load中......

的Page_Load每个页面加载时有发生,即使是在回发,所以firstdrop下被重新填充authorList_Changed事件之前。这导致最重要的项目被重新选择。

请参阅Page Lifecycle

,如果把你的数据绑定代码在Page_Load里面的语句,像这样:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(!Page.IsPostback) 
     { 
      var a = (from s in p.Authors 
        select s.FirstName); 
      authorList.DataSource = p.Authors; 
      authorList.DataTextField = "Firstname"; 
      authorList.DataValueField = "FirstName"; 
      authorList.DataBind(); 
      authorList.SelectedIndexChanged += new EventHandler(authorList_Changed); 
      var q = (from s in p.Authors 
        where s.FirstName.Contains("m") 
        select s); 
      Grid1.DataSource = q; 
      Grid1.DataBind(); 
     // authorList.DisplayMember = "FirstName"; 
     } 
    }