VideMedlem sedan dec. 19998 577 inlägg Jag använder en PlaceHolder för att lägga till formulärselement automatiskt, men nu när jag skall kontrollera värdena av dessa (vid en postning) så har jag ju inte dessa kontroller refererade i klassen, hur skall jag komma åt värdena?
Jag har testat att försöka hämta kontrollerna via PlaceHolder-objektet men jag får inte fram själva värdena.
Mvh, Vide
GladhMedlem sedan maj 20012 812 inlägg Problemet är som du säger att du skapar dina kontroller dynamiskt och lägger dessa till din sida. När sedan sidan laddas om så försvinner dessa kontroller och ASP vet då inte till vilka kontroller som den datan som kommer skall bindas.
Har faktiskt aldrig gjort så, men antar att du kan använda vanligt request.form() för att få fram de värden du vill. Värden bör även finnas i ViewStaten och den kan du ju komma åt från din sida.
Annars så TROR jag du kan lösa det genom att återskapa dina controller i Page_Init(), det bör göra så att de nya kontrollerna får värdena som skickas från sidan. Detta är dock ingen vidare snygg lösning.
- M
VideMedlem sedan dec. 19998 577 inlägg Hmm... det blev jobbigt det här, jag får hitta någon bra lösning på problemet nåron annan väg...
Engine^Medlem sedan dec. 20003 887 inlägg VideMedlem sedan dec. 19998 577 inlägg
Engine^ skrev:
Är det samma typ av problem som jag bråkade med?
Problem att hitta TextBox-värde efter PostBack i en UserControl
Mnja, jag har ju inte ens tillgång till formulärselementobjekten via referens, och jag vet inte vilket index elementet har heller.
Kommer att bli spännande detta.... återkommer imorrn med funderingar. ;)
VideMedlem sedan dec. 19998 577 inlägg Nu verkar det vara imorrn. ;)
Jag är närmare lösningen genom att loopa igenom alla Controls och sedan lägga dessa i respektive objektinstanser.
Exempel:
protected PlaceHolder PHQuestionnaire;
private void PopulateQuestionnaire()
{
for ( int i = 1; i <= 10; i++ )
{
TextBox oTB = new TextBox();
oTB.ID = "QTBID" + Convert.ToInt32(i);
oTB.CssClass = "text";
oTB.TextMode = System.Web.UI.WebControls.TextBoxMode.SingleLine;
oTB.Text = "Text" + Convert.ToInt32(i);
PHQuestionnaire.Controls.Add( oTB );
Literal oLiteralBR = new Literal();
oLiteralBR.ID = "literalbr" + i;
oLiteralBR.Text = "<br>\n";
PHQuestionnaire.Controls.Add( oLiteralBR );
}
}
public void GetElements(object sender, System.EventArgs e)
{
for( int j = 1; j < PHQuestionnaire.Controls.Count; j++ )
{
TextBox _tb = (TextBox) PHQuestionnaire.FindControl( "QTBID" + Convert.ToInt32( j ) );
if( !(null == _tb) )
{
Response.Write( Convert.ToString( _tb.ID + ": " + _tb.Text ) + "<br>" );
}
}
}