2009-06-30 4 views
0

Ich habe ein kleines Problem, ich erstelle eine Bearbeitungsseite in meiner asp.net-Anwendung, wo der Benutzer Eigenschaften in einem Objekt bearbeiten kann. Ich habe zwei Dropdown-Listen (Kategorie und Gruppe), in denen die Anzahl der Gruppen von der gewählten Kategorie abhängt. Mein Ziel ist es, die richtige Kategorie und das zu bearbeitende Objekt anzuzeigen, dann die Liste der Gruppen zu laden und die richtige Gruppe auszuwählen - das Problem ist, dass mein ausgewählter Indexwechsel nie ausgelöst wird.Wie baue ich mein Bearbeitungsformular in asp.net, wo zwei Dropdowns voneinander abhängig sind?

Wenn ich meine Kategorien in page_load laden und die Kategorien füllen Sie den Code wie folgt aussieht: ich möchte ausführen sollten alle Gruppen laden und die Drop-Down-bevölkern und

protected void Page_Load(object sender, EventArgs e) 
    { string editid= Request["edit"] == null ? null : Request["edit"].ToString(); 
     int id = Convert.ToInt32(editid); 
     if (link == null) 
     { 
      link = BLLink.Load(id, blm); 
     } 
     if (!IsPostBack) 
     { 
      group = BLGroup.Load(link.GroupId, blm); 
      category = BLCategory.Load(group.CategoryId, blm); 

      List<BLCategory> categories = BLCategory.LoadAll(); 
      categoryDropDown.DataSource = categories; 
      categoryDropDown.DataTextField = "CategoryName"; 
      categoryDropDown.DataValueField = "id"; 
      categoryDropDown.SelectedValue = category.id.ToString(); //this one doesnt cause the event to fire??? Doesnt matter if it is called after the databind() method 
      categoryDropDown.DataBind(); 
     } 

}

TheEvent Handler wählen Sie die richtige:

protected void categoryDropDown_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     category = BLCategory.Load(Convert.ToInt32(categoryDropDown.SelectedValue), new TestModelDataContext()); 
     if (category != null) 
     { 
      List<BLGroup> groups = BLGroup.LoadAll(category.id); 
      groupDropDown.DataSource = groups; 
      groupDropDown.DataTextField = "GroupHeading"; 
      groupDropDown.DataValueField = "GroupId"; 
      groupDropDown.DataBind(); 
      if (group != null) 
      { 
       groupDropDown.SelectedValue = group.GroupId.ToString(); 
      } 
      else 
      { 
       groupDropDown.SelectedIndex = 0; 
      } 
     } 
    } 

ich weiß nicht, was falsch läuft, das ist wie eine einfache Sache scheint zu tun, was mache ich falsch?

Antwort

0

Damit dieses Ereignis ausgelöst wird, muss die Seite PostBack sein, wenn sich die Benutzerauswahl ändert. Dadurch wird die gesamte Seite aktualisiert (die Steuerelemente sollten jedoch ihren Status beibehalten).

Dieses SelectedIndexChanged-Ereignis wird auf dem Server ausgeführt, und ich denke, es gibt eine Eigenschaft in der ersten Dropdown-Liste zum Senden/Postback, wenn das ausgewählte Element darauf geändert wird.

clientseitige Verhalten zu erhalten, können Sie zwei Dinge tun:
1) in einem Update diesen Abschnitt Wickel und die zweite Liste Refresh, wenn der Wert der ersten
2) Laden Sie ändert den Wert mit Hilfe von JavaScript client- Der Seitencode, der ausgelöst wird, wenn sich der ausgewählte Wert im ersten ändert, ruft die Liste ab und füllt die zweite.
2a) Sie können entweder einen Dienst schreiben, der den Aufruf an die Datenquelle bindet, und die Werte als JSON usw. zurückgeben. oder 2b) Sie können alle Werte für jede mögliche Auswahl in ausgeblendete Felder eintragen, die auf irgendeine Weise durch die Werte in der ersten Box ident sind (dies ist nicht wünschenswert, aber möglich in Abhängigkeit von der Sicherheit und Größe Ihrer Daten) Sätze).

Option 1 ist wahrscheinlich die einfachste Möglichkeit, Ihre vorhandene Codebasis beizubehalten und trotzdem clientseitiges Verhalten zu erhalten.

+0

Für kleine Datensätze würde ich Option 2b empfehlen. Für große Datensätze 2a. Ich würde nur auf die schnelle und schmutzige Option 1 zurückgreifen, wenn die Lieferzeit wichtiger ist als die Benutzererfahrung. Postbacks mit oder ohne Update-Panels führen oft zu einer langsamen Benutzererfahrung. –

Verwandte Themen