2017-12-31 46 views
0

Ich wähle einen Wert auf der ddl, und es zeigt nicht die Produkte auf der Seite. Der ausgewählte Wert bleibt gebunden, aber die Seite ist leer.C# Drop-Down-Liste nicht Auslöser Index ändern

Auch, wenn ich nur Funktion getCat() ohne Verwendung von if (! Ispostback) aufrufen. Wenn ich die Seite lade, bleibt die Dropdown-Liste auf dem ersten Wert hängen, aber es zeigt die Produkte auf der Seite an.

Drop Down Liste:

<asp:dropdownlist runat="server" id="ddcateg" AutoPostBack="true" onselectedindexchanged="Ddcateg_SelectedIndexChanged"></asp:dropdownlist> 

Dies ist die Umsetzung:

protected void Page_Load(object sender, EventArgs e) 
{ 
    //afisare(); 

    if (!IsPostBack) 
    { 
     getCateg(); 
    } 

} 


public void getCateg() 
{ 

    ProdusTipModel model = new ProdusTipModel(); 
    FarmacieEntities db = new FarmacieEntities(); 

    var lizt = (from c in db.ProdusTips select c).ToList(); 


     ddcateg.DataSource = lizt; 
     ddcateg.DataValueField = "ID"; 
     ddcateg.DataTextField = "Name"; 


    ddcateg.DataBind(); 
    ddcateg.SelectedIndexChanged += Ddcateg_SelectedIndexChanged; 
} 


public void afisare2(List<Produ> z) 
{ 
    ProdusModel mdl = new ProdusModel(); 

     foreach (var produs in z) 
     { 
      Panel produsePnl = new Panel(); 
      ImageButton imageButton = new ImageButton(); 
      produsePnl.BorderColor = Color.AliceBlue; 

      Label lblNume = new Label(); 
      Label lblPret = new Label(); 

      produsePnl.BorderStyle = BorderStyle.Groove; 
      produsePnl.BorderColor = Color.LightSkyBlue; 

      imageButton.ImageUrl = "~/Img/Produse/" + produs.Image; 
      imageButton.CssClass = "imgProdus"; 
      imageButton.PostBackUrl = "~/Pages/PaginaProdus.aspx?id=" + produs.ID; 

      lblNume.Text = produs.Name; 
      lblNume.CssClass = "numeProd"; 

      lblPret.Text = produs.Price + "lei"; 
      lblPret.CssClass = "produsPret"; 


      produsePnl.Controls.Add(imageButton); 
      produsePnl.Controls.Add(new Literal { Text = "<br /" }); 
      produsePnl.Controls.Add(lblNume); 
      produsePnl.Controls.Add(new Literal { Text = "<br /" }); 
      produsePnl.Controls.Add(lblPret); 

      pnlProduse.Controls.Add(produsePnl); 

     } 

} 



private void Ddcateg_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DropDownList selectedList = (DropDownList)sender; 
    int selectedLit = Convert.ToInt32(selectedList.SelectedValue); 

    ProdusModel mdl = new ProdusModel(); 
    List<Produ> list = mdl.GetProdCateg(selectedLit).ToList(); 

    afisare2(list); 

} 
+0

Sie den Namen des Ereignisses falsch geschrieben: es ist onselectedindexexchanged, nicht onselectedindexchange – dlatikay

+0

, dass ich selbst schrieb, in meinem Code ist richtig, es funktioniert nicht :( –

+0

Bitte immer den Code, den Sie tatsächlich verwenden. Veröffentlichen Sie eine minimale, vollständige Beispiel, so dass die Leute das Problem reproduzieren könnten – dlatikay

Antwort

1

Ihr Problem könnte sein, dass der Code hinter Methode privat ist:

private void Ddcateg_SelectedIndexChanged(object sender, EventArgs e) 

Probieren Sie es geschützt zu machen oder öffentlich, so dass es von der aspx-Seite gesehen werden kann.

+0

Ich habe es total vergessen, es wurde automatisch generiert.Das war das Problem.Mehr! –

+1

Wenn es nicht von der aspx gesehen werden kann, sollten Sie Methode nicht gefunden Ausnahme –

+0

Ich benutze Visual Studio. Manchmal zeigt das Fehlerfeld mir nicht alle Fehler an. Ich muss 2-3 mal complie geben, um es angezeigt zu bekommen. Akward, nur für mich passiert das. Danke nochmal für die Antwort :) –

Verwandte Themen