Gå til innhold

Dynamiske checkboxer i asp.net


Anbefalte innlegg

Jeg har et par checkboxer som er plassert i en PlaceHolder avhengig av hva brukeren velger i steget før. Det jeg ønsker å gjøre videre er å sende brukeren videre til en ny side. Hvilke side dette blir avhenger av hvilken av de to checkboxene som velges. Jeg strever med å få hentet ut hvilken av disse checkboxene som er trykket og derfra brukt Response.Redirect for å sende brukeren til ny side. Jeg regner med at jeg trenger en ny "event-metode" ala checkbox_changed(object s, EventArgs e), men jeg klarer ikke å få fatt i resultatet som sendes fra metoden som vises i koden under. Noen som kan komme med tips?

 

public void createCheckboxes()
   {
       CheckBox cb1 = new CheckBox();
       cb1.ID = "cb1_id";
       cb1.AutoPostBack = true;
       cb1.BorderColor = System.Drawing.ColorTranslator.FromHtml("#a8c0f6");
       cb1.BackColor = System.Drawing.ColorTranslator.FromHtml("#a8c0f6");
       cb1.ForeColor = System.Drawing.Color.Black;
       cb1.Text = "Specify individual booking times for each resource";


       CheckBox cb2 = new CheckBox();
       cb2.ID = "cb2_id";
       cb2.AutoPostBack = true;
       cb2.BorderColor = System.Drawing.ColorTranslator.FromHtml("#a8c0f6");
       cb2.BackColor = System.Drawing.ColorTranslator.FromHtml("#a8c0f6");
       cb2.ForeColor = System.Drawing.Color.Black;
       cb2.Text = "Check available booking times for the selected service";


       PlaceHolderChkBoxAlt.Controls.Add(cb1);
       PlaceHolderChkBoxAlt.Controls.Add(new LiteralControl("<br>"));
       PlaceHolderChkBoxAlt.Controls.Add(cb2);

   }

Lenke til kommentar
Videoannonse
Annonse

Skal bare en av de checkes, og i det dette skjer skal man sendes videre til neste side?

 

 

Da kan du vel gjøre, som du sier, å bruke chekBox.CheckChanged eller hva den heter, og så definere funksjonen checkChange(object sender, EventArgs e) eller noe slikt, og så legger til denne funksjonen som event på de begge. i funksjonen bruker du da:

switch( (sender as CheckBox).ID )
{
 case "cb1_id":
//ettellerannet
break;
 case "cb2_id":
//noe annet
break;
}

...for eksempel...

Endret av Manfred
Lenke til kommentar

Takk for svaret Manfred! Jeg får det imidlertid ikke til å virke som jeg ønsker. Når jeg velger checkbox, så blir ikke brukeren transportert til ny side, men skjermen oppdateres uten at noe synlig skjer på en måte. Her er koden jeg bruker:

 

public void createCheckboxes()
   {
       CheckBox cb1 = new CheckBox();
       cb1.ID = "cb1_id";
       CheckBox cb2 = new CheckBox();
       cb2.ID = "cb2_id";

       cb1.BorderColor = System.Drawing.ColorTranslator.FromHtml("#a8c0f6");
       cb1.BackColor = System.Drawing.ColorTranslator.FromHtml("#a8c0f6");
       cb1.ForeColor = System.Drawing.Color.Black;
       cb1.Text = "You are being sent to a new page_1";
       cb1.AutoPostBack = true;
       cb1.CheckedChanged += new EventHandler(cb_CheckedChanged);


       cb2.BorderColor = System.Drawing.ColorTranslator.FromHtml("#a8c0f6");
       cb2.BackColor = System.Drawing.ColorTranslator.FromHtml("#a8c0f6");
       cb2.ForeColor = System.Drawing.Color.Black;
       cb2.Text = "You are being sent to a new page_2";
       cb2.AutoPostBack = true;
       cb2.CheckedChanged += new EventHandler(cb_CheckedChanged);

       PlaceHolderChkBoxAlt.Controls.Add(cb1);
       PlaceHolderChkBoxAlt.Controls.Add(new LiteralControl("<br>"));
       PlaceHolderChkBoxAlt.Controls.Add(cb2);

   }

 

Funksjonen som definerer hva som skal skje er her:

    protected void cb_CheckedChanged(Object s, EventArgs e)
   {

       switch ((s as CheckBox).ID)
       {
           case "cb1_id":
               Response.Redirect("SpecifyNewTime.aspx");
               break;
           case "cb2_id":
               Response.Redirect("BookService.aspx");
               break;
       }

   }

 

Noen som ser hva jeg gjør feil?

 

Skal bare en av de checkes, og i det dette skjer skal man sendes videre til neste side?

 

 

Da kan du vel gjøre, som du sier, å bruke chekBox.CheckChanged eller hva den heter, og så definere funksjonen checkChange(object sender, EventArgs e) eller noe slikt, og så legger til denne funksjonen som event på de begge. i funksjonen bruker du da:

switch( (sender as CheckBox).ID )
{
 case "cb1_id":
//ettellerannet
break;
 case "cb2_id":
//noe annet
break;
}

...for eksempel...

Lenke til kommentar

Dette har nok med viewstate å gjøre. Et eller annet sted kaller du din createCheckboxes() metode (trolig i Page_Load). Sørg for at det ike gjøres dersom det er en postback (if (!Page.IsPostBack) { createCheckboxes(); })

 

Men uansett, det er ingen vits å generere disse kontrollene code-behind. Da blir ting langt mer komplisert enn det trenger å være. Du er inn på noe, placeholdere er en bra løsning, men et tips er nok å skjule/vise placeholdere etter hva som er valgt, ikke generere kontroller etter hva som er valgt. Dette er langt enklere.

Lenke til kommentar

Jeg sjekket ViewState på Placeholderen og den var satt til true. Men serverside, hvis jeg ikke bruker codebehind på checkboxene vil de vel vises på siden hele tiden og ikke dukke opp avhengig av hva brukeren gjør forut? Eller misforstår jeg dette? Kan du vise med et eksempel hvordan jeg kan skjule/vise vha. PlaceHolder?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...