Legen Sie Textfelder in ein Repeater dynamisch und abrufen Ihrer Wert

Habe ich einen Repeater gebunden von SQL, mit einer Mischung von editierbaren und schreibgeschützten Elementen. Wenn du auf den "Bearbeiten" - Taste auf einer Zeile, die Bearbeitbare Portionen umrechnen sollten, um die Textfelder, und wenn Sie klicken Sie auf "Update", sollte es Ihre änderungen zu speichern.

Hier ist eine (sehr) vereinfachte version der Edit-und Update-Button " OnClick code:

switch(commandName)
{
    case "Edit":
        Label1.Visible = false; //hide read-only version
        PlaceHolder1.Visible = true; //show editing version

        //Dict1 is Dictionary<string, string> in this example.
        foreach (var key in Dict1)
        {
            //insert a TextBox dynamically into the PlaceHolder
            PlaceHolder1.Controls.Add(new TextBox 
            { 
                ID = "txt" + key, 
                Text = Dict1[key] 
            });
        }
        break;

    case "Update":
        //retrieve user input from dynamically-added TextBoxes
        foreach (var TextBox1 in PlaceHolder1.Controls.Where(c => c.ID.StartsWith("txt")))
        {
            doStuff(TextBox1);
        }

        Label1.Visible = true; //show read-only version
        PlaceHolder1.Visible = false; //hide editing version
        break;
}

Das problem ist, dass meine dynamisch hinzugefügte Textfelder gibt es nicht, wenn die Seite Beiträge zurück. Ich habe untersucht PlaceHolder1.Controls im debugger, und es gibt keine Textboxen in es. PlaceHolder1 selbst ist im inneren ein Repeater, aber ich bin nicht neubindung der Repeater auf PostBack.

Habe ich mir überlegt mit raw HTML anstelle von TextBox-Steuerelemente und ziehen Sie die Werte aus der Anfrage.Form, aber das fühlt sich hackish zu mir. Wie kann ich das dynamisch hinzugefügte Textfelder persistent über postbacks?


EDIT:

Gibt es einige Komplikationen hier, dass es schwer ist zu zeigen, ohne eine Tonne von Beispiel-code. Hier sind die großen:

  • Jede Zelle in dem repeater eine Mischung von nur-lese-und bearbeitbaren text (D. H., die dynamisch eingefügten Beschriftungen und Textfelder)
  • Ich weiß nicht, wie viele Bearbeitbare Bereiche werden in jeder Zelle. Der original-text Aussehen könnte blah blah @A1@ blah blah @A2@ blah..., und ich würde zu legen Sie den Ersatz-text an Stelle von @A1@, @A2@, usw. Im edit-Modus, nur, dass der Ersatz der text kann bearbeitet werden.
  • By the way, ist dieses stark vereinfachte Beispiel-code. Ich weiß nicht wirklich geben meine Steuerelemente Namen wie Label1.
Schreibe einen Kommentar