Dynamisk form og PostBack problem
Hejsa.Jeg sidder med et problem, der vedrører en dynamisk genereret formular.
Jeg har en webform, hvor jeg som det første skal hente nogle kundedata fra en database ved at vælge kunden i en dropdown-liste og herefter klikke på en knap (første postback).
Herefter har jeg fx. et inputfelt, hvor det er muligt at specificere et tal. Når man trykker på genererForm vises x-antal input-felter med en tilhørende dropdown liste (andet postback), hvor man kan indtaste en vare og vælge en faktureringsperiode i antal år fra dropdownlisten.
Inputfelterne bliver genereret i en metode, der kaldes af en eventhandler-metode, således:
// ************************************************************************************
// GenerateDomainTextBoxes_Click() - Eventhandler til domain-tekstbokse
// ************************************************************************************
protected void GenerateDomainTextBoxes_Click(object sender, EventArgs e)
{
string strNumberOfDomainTextBoxes = txtbox_NumberOfDomains.Text.Trim();
if (!String.IsNullOrEmpty(strNumberOfDomainTextBoxes))
{
numberOfDomains = Convert.ToInt32(strNumberOfDomainTextBoxes);
DisplayDomainControls(numberOfDomains);
}
}
// ************************************************************************************
// DisplayDomainControls() - Opretter x-antal textboxes og ddls ud fra valgt antal
// ************************************************************************************
protected void DisplayDomainControls(int intNumberOfDomains)
{
for (int i = 1; i <= intNumberOfDomains; i++)
{
TextBox txtbox_Domain = new TextBox();
txtbox_Domain.ID = "txtbox_Domain" + i.ToString();
txtbox_Domain.CssClass = "textboxDomain";
DropDownList dropdownList = new DropDownList();
dropdownList.ID = "ddl_NumberYears" + i.ToString();
ListItem item0 = new ListItem("Registreringsperiode", "0");
ListItem item1 = new ListItem("1 år", "1");
ListItem item2 = new ListItem("2 år", "2");
ListItem item3 = new ListItem("3 år", "3");
ListItem item4 = new ListItem("4 år", "4");
ListItem item5 = new ListItem("5 år", "5");
dropdownList.Items.Add(item0);
dropdownList.Items.Add(item1);
dropdownList.Items.Add(item2);
dropdownList.Items.Add(item3);
dropdownList.Items.Add(item4);
dropdownList.Items.Add(item5);
TableRow row = new TableRow();
TableCell cellDomainLabel = new TableCell();
TableCell cellDomainTextbox = new TableCell();
TableCell cellDomainYears = new TableCell();
cellDomainLabel.Text = "Domæne " + i.ToString();
cellDomainTextbox.Controls.Add(txtbox_Domain);
cellDomainYears.Controls.Add(dropdownList);
row.Cells.Add(cellDomainLabel);
row.Cells.Add(cellDomainTextbox);
row.Cells.Add(cellDomainYears);
tableDomains.Rows.Add(row);
}
}
Når jeg til sidst har indtastet x-antal varer og valgt tilhørende faktureringsperioder for disse varer, klikker jeg på en knap med en tilhørende eventhandler, der så gerne skulle kunne hente værdierne ud fra formfelterne og dropdownlisterne og samle det hele sammen i en ordre.
Jeg benytter her:
for (int i = 1; i <= numberOfDomains; i++)
{
Response.Write(Request.Form["txtbox_Domain" + i.ToString()] + "<br />");
}
Det virker dog ikke, da det virker som om felterne er tomme.
Det skal siges at jeg er nødt til at 'tvinge' mit valg af antal form-felter på siden i min pageLoad med:
// Variable til generering af forms ved postback
if (numberOfDomains > 0)
DisplayDomainControls(numberOfDomains);
if (numberOfServices > 0)
DisplayServiceControls(numberOfServices);
Hvor numberOfDomains og numberOfServices er sat i de føromtalte eventhandler-metoder, der genererer x-antal form-felter.
Jeg har lavet en tilsvarende test på en anden webform - dog lidt mere simpel. hvor det virker fint med at indtaste et tal og derefter generere et antal tekstbokse, som man kan udfylde og sende tilbage. Her skrives indholdet fint ud på siden efter det andet PostBack.
Men har jeg overset noget her, eller er der en bedre måde at lave det jeg forsøger at lave?