2016-07-21 10 views
0

Ich habe eine DropDownList und eine CheckBox auf meinem Webformular. Nachdem auf DropDownList geklickt wurde, wird dieses Ereignis an den Server gesendet. DropDownList_SelectedIndexChanged Ereignis wird auf der Serverseite aufgerufen. In diesem Event-Handler habe ich CheckBox.Checked = true, aber ich konnte die Seite auf der Clientseite nicht dazu bringen, diese Änderung widerzuspiegeln (CheckBox.Checked = true). Wie erreiche ich das? Oder bin ich in die falsche Richtung, um den DropDownList Eventhandler zu verwenden, um die CheckBox zu aktualisieren, weil die Seite zuerst neu lädt und dann DropDownList_SelectedIndexChanged aufgerufen wird?Wie können CheckBoxes auf der Client-Seite aktualisiert werden, nachdem Änderungen auf der Serverseite vorgenommen wurden?

Seite Load-Methode:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    {    
     this.DropDownList1.Items.Clear();     
     AddItemsToDropDownList(); 
    } 
} 

Dropdownlist ausgewählt Index veränderte Ereignishandler:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var selected = this.DropDownList1.SelectedItem.Text; 
    CheckBox checkBox = GetCheckBoxToBeSetByText(selected); 
    checkBox.Checked = true; 
} 
+0

"Normalerweise" sollte die "Checked" Eigenschaft der CheckBox ausreichen. Ein paar Dinge können die Sache jedoch komplizierter machen. Initialisieren Sie den CheckBox-Status in Ihrem 'Page_Load' Event-Handler? Verwenden Sie UpdatePanels? Wird Javascript beim Laden der Seite auf der Client-Seite ausgeführt? Sie könnten den entsprechenden Code in Ihre Frage eingeben. – ConnorsFan

Antwort

0

OK. Ich habe das Problem gefunden. Eigentlich ist nichts falsch mit dem Code in meinem ursprünglichen Post. Aber um ein möglichst kleines Beispiel zu machen, habe ich etwas "extra" -Code entfernt. Das Folgende ist der "vollständige" Code (OK, gut, ich habe noch etwas Code entfernt). Wie Sie sehen können, setze ich die CheckBox in ein statisches Wörterbuch. Jedes Mal, wenn der Ereignishandler SelectedIndexChanged aufgerufen wird, ändert er die CheckBox in diesem statischen Wörterbuch, was bedeutet, dass er das CheckBox-Objekt ändert, das bei der letzten Sitzung erstellt wurde? (immer noch nicht klar hier) Sieht aus wie jedes Mal, wenn eine Postback-Nachricht empfangen wird, wird ein neuer Satz von CheckBox-Objekten erstellt. Trag mit mir, wenn das hier schon allen bekannt ist, denn ich habe bis heute nur zwei Tage Erfahrung mit dieser Web-Entwicklung.

private static Dictionary<Environment, CheckBox> EnvironmentsCheckBoxes; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     EnvironmentsCheckBoxes = new Dictionary<Environment,CheckBox>(); 
     EnvironmentsCheckBoxes.Add(Environment.Dev1, this.Dev1_CheckBox); 
     EnvironmentsCheckBoxes.Add(Environment.Dev2, this.Dev2_CheckBox); 
     EnvironmentsCheckBoxes.Add(Environment.QA, this.QA_CheckBox); 
     EnvironmentsCheckBoxes.Add(Environment.QA2, this.QA2_CheckBox); 
     EnvironmentsCheckBoxes.Add(Environment.Demo, this.Demo_CheckBox); 
     EnvironmentsCheckBoxes.Add(Environment.Prod, this.Prod_CheckBox); 
     EnvironmentsCheckBoxes.Add(Environment.UAT, this.UAT_CheckBox); 
    } 
} 

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var selected = this.DropDownList1.SelectedItem.Text; 

    if (selected == "Dev1") 
    { 
     EnvironmentsCheckBoxes[Environment.Dev1].Checked = true; 
    } 
    else if (selected == "Dev2") 
    { 
     ... 
    } 

    ... 
} 
Verwandte Themen