Frage

Ich brauche die folgenden Funktionen zu erstellen, und auf der Suche nach dem besten Weg zum Speichern von Informationen über mehrere Postbacks:

sagen, ich habe eine TextBox, die auf eine Frage bezieht, das heißt „Orte, die ich besucht habe.“ Sobald TextBox wird beim ersten Laden geladen werden. Darunter gibt es eine Taste, um „einen anderen Ort hinzufügen“. Dies wird Postback, die dann eine andere TextBox unter dem ersten hinzufügen. Dies kann geschehen x mal sein.

Die Frage, die ich habe, ist, wie kann ich speichern / erinnere dich an die Anzahl der Kontrollen, die auf der Seite vom Benutzer hinzugefügt wurden, unter Berücksichtigung, dass diese Last Bedürfnisse in dem Init-Ereignisse zu tun, und Viewstate ist nicht auf diese geladen Punkt?

EDIT *:

ich habe vergessen zu erwähnen, dass, wenn der Benutzer speichert, gäbe es einige Validierung, also, wenn die Validierung fehlschlägt, müssen alle Textfelder zeigen, mit ihren gebuchten Daten.

War es hilfreich?

Lösung 3

Nach einiger Überlegung und unter Berücksichtigung der Antworten gegeben, kam mit dieser Lösung auf.

In der Kontrollen Platzhalter hat ein verstecktes Eingabefeld, das die Anzahl der Kontrollen auf der Seite hinzugefügt wird gespeichert. Dann auf Init, kann ich den folgenden Code (Prüfung nur):

protected override void OnInit(EventArgs e)
{
    int i = 0;
    i = Int32.Parse(hdnTestCount.Value);

    if(Request.Params[hdnTestCount.UniqueID] != null)
    {
        i = Int32.Parse(Request.Params[hdnTestCount.UnitueID]);
    }

    for (int j = 1; j <= i; j++)
    {
         TextBox txtBox = new TextBox();
         txtBox.ID = "Test" + j.ToString();
         plhTest.Controls.Add(txtBox);
    }
}

protected void btnAdd_OnClick(object sender, EventArgs e)
{
    int i = 0;
    i = Int32.Parse(hdnTestCount.Value) + 1;

    TextBox txtBox = new TextBox();
    txtBox.ID = "Test" + i.ToString();
    plhTest.Controls.Add(txtBox);
    hdnTestCount.Value = i.ToString();
}

Natürlich das einzige Problem dabei ist, dass der Wert durch den Benutzer in dem verborgenen Bereich manipuliert werden könnten. Die einzige andere Möglichkeit wäre Session zu verwenden, die ich verwenden möchte, nicht, wie es um klebt, wobei, wenn die Seite auf diese Weise aufgefrischt wird, wird das Formular selbst zurückzusetzen, das ist, was passieren sollte.

Andere Tipps

Wenn Sie nur wollen eine endliche Anzahl von Textfeldern auf dem Formular erlauben, Sie die Anzahl der Textfelder während Page_Init schaffen könnten und ihre Sichtbarkeit auf false gesetzt, so dass sie nicht im Browser gerendert werden würden. Auf dem Click-Ereignis der Schaltfläche, können Sie die ersten unsichtbaren Textbox finden und die Sichtbarkeit auf true ändern. So etwas wie diese

protected void Page_Init(object sender, EventArgs e)
{
    for (int i = 0; i < 20; i++)
    {
        this.Form.Controls.Add(new TextBox() { Visible = false });
    }
}

protected void addTextboxButton_Click(object sender, EventArgs e)
{
    TextBox tb = this.Form.Controls.OfType<TextBox>().FirstOrDefault(box => box.Visible == false);
    if (tb != null) tb.Visible = true;
}

Mit diesem Ansatz werden die Textfelder sichtbar werden nacheinander auf jede Taste klicken und die Postbacks Werte bleiben.

Natürlich würden Sie wollen etwas mehr Arbeit hineingesteckt, wie vielleicht einige wörtliche Kontrollen definining Zeilenumbrüche und Eingabeaufforderungen für die Textfelder zu erstellen, sowie Anzeigen einer Nachricht, wenn der Benutzer Hit unabhängig von endlichen Grenzwert Sie festlegen.

Option 1: Sie können Session verwenden, um die Anzahl der Textfelder zu speichern ...

Option 2:. Sie können auch Kontrollen in dem Load-Ereignis der Seite hinzufügen, wobei Sie die Viewstate Informationen haben

Hier sind die Links, die Sie ...

helfen könnte

TRULY Verständnis Dynamische Steuerelemente

wirklich zu verstehen Viewstate

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top