Ich habe ein Problem, Kontrollen/Kontrollen ID zu bekommen, die ich manuell aus Code hinter erstellt habe. Nach der Untersuchung fand ich, wenn ich die Tabelle und seine alle Komponente einschließlich alle Steuerelemente in Page_Init() -Methode erstellen, sollte beim Rendern nach Postback der Textwert der Textfeldsteuerung für die Seite verfügbar sein. Ich habe versucht, das Textbox-Steuerelement mit FindControl() -Methode zu finden. beim Debuggen erreichen sie nur auf der Linie, wo ich versucht, die Steuerung unter Verwendung Findcontrol() zu lokalisieren und dann eine Ausnahme „Objektverweis nicht auf eine Instanz eines Objekts festgelegt“ throw BalgFehler beim Suchen nach Steuerelementen aus dem Code dahinter.
die Page_Init() Methode istprotected void Page_Init(object sender, EventArgs e)
{
Table tb = new Table();
tb.ID = "Table1";
TableRow row1 = new TableRow();
TableCell cell1 = new TableCell();
TableCell cell2 = new TableCell();
TableCell cell3 = new TableCell();
TextBox txtbx = new TextBox();
Button btn = new Button();
cell1.Text = "Name: ";
txtbx.ID = "table1_text_input";
txtbx.ValidationGroup = "rosy";
cell2.Controls.Add(txtbx);
btn.Text = "Get the input";
btn.ValidationGroup = "rosy";
btn.Click += getBoxinput_Click;
cell3.Controls.Add(btn);
// adding cells to row1
row1.Cells.Add(cell1);
row1.Cells.Add(cell2);
row1.Cells.Add(cell3);
// adding row to table1
tb.Rows.Add(row1);
Panel1.Controls.Add(tb);
}
Unten ist das Ereignis click click, das die Steuer-ID und ihren Text anzeigen soll. Ich stehe in den letzten Tagen fest damit. jede Hilfe wird geschätzt.
protected void getBoxinput_Click(object sender, EventArgs e)
{
try
{
if (IsPostBack)
{
Table t = (Table)Page.FindControl("Panel1").FindControl("Table1");
TextBox tbox;
foreach (TableRow tr in t.Rows)
{
foreach (TableCell tc in tr.Cells)
{
foreach (Control cnt in tc.Controls)
{
if (cnt.GetType() == typeof(TextBox))
{
tbox = (TextBox)cnt;
display.Text += "control id: " + tbox.ID + " control input: " + tbox.Text + "<br/>";
}
}
}
}
}
}
catch (NullReferenceException ex)
{
display.Text += ex.Message;
}
}
beide Methode in der gleichen Klasse. aber wenn Sie sagen, ziehen Sie alle Steuerelemente im globalen Rahmen, wie Sie das tun? Wenn es nicht zu viel verlangt ist, würden Sie mir bitte einen Code zeigen, der zeigt, wie man alle Steuerelemente von einer Seite zieht. Entschuldigung, ich lerne immer noch. –
Ich bin immer einen Schritt hinter, denke ich. Entschuldigung, nachdem Sie mir davon erzählt haben, dass Sie Kontrollen aus dem globalen Rahmen ziehen, habe ich etwas recherchiert und das gleiche gefunden, was Sie hier erklärt haben. Vielen Dank dafür. aber leider, ein neues Problem entstand, das ist, wenn ich diese Tabelle zu einem Panel, das bereits in der ASPX-Datei ist, nicht den Code hinter der Datei, es wirft einen Fehler. und lass mich nicht die Tabelle zum Panel hinzufügen. es wirft den gleichen Fehler wie zuvor "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt. Panel-Attribut" runat "bereits auf" Server "gesetzt. –
Leider habe ich nicht viel Erfahrung mit ASP.NET, und da Ihr Fehler erwähnt' Das Attribut "runat" ist bereits auf "server" gesetzt. "Ich vermute jetzt, dass etwas mit ASP.NET und nicht mit C# zu tun hat. Meine beste Vermutung wäre, den Wert der Eigenschaft" runat "auf etwas anderes als" server "zu setzen ändere es zurück zu "server". Sorry, ich kann hier nicht mehr nützlich sein. – Agustin0987