2 votes

Tableau ASP.NET dynamique avec TextBoxes - Enregistrer les valeurs dans ViewState

J'ai un site .aspx avec une table ASP. Dans le fichier de code derrière, je remplis la table avec des rangées, des cellules et dans les cellules se trouvent des TextBoxes ASP.

Au premier chargement, je remplis les boîtes de texte avec des valeurs provenant d'une base de données. Mais après que quelqu'un ait modifié la valeur et soumis la page avec un bouton créé, il n'y a pas d'accès aux lignes de la table créées par le programme.

J'ai vu des messages indiquant qu'une table asp dynamique créée est réinitialisée par le postback.

maintenant j'ai une question, comment puis-je obtenir les valeurs qui sont modifiées par les utilisateurs sur le site ? !

J'ai essayé de remplacer les fonctions SaveViewState et LoadViewState, mais SaveViewState n'est appelé qu'après le chargement de la page, mais pas si quelqu'un clique sur un bouton ?

J'aimerais sauvegarder les données des zones de texte pour pouvoir les utiliser dans le code après que l'utilisateur ait cliqué sur un bouton.

Qu'est-ce que je peux faire ?

1voto

Alexander Points 2427

A) Les contrôles créés dynamiquement doivent être créés dans l'événement Page Init. De cette façon, ils existent lorsque le ViewState est restauré (ce qui se produit avant le chargement de la page).

b) Vous devez TOUJOURS les créer dans Page Init, qu'il s'agisse d'un PostBack ou non.

c) Créez toujours les contrôles dans le même ordre.

Ensuite, ils conserveront automatiquement leurs valeurs lors d'un PostBack.

Lisez ceci, s'il vous plaît : Aperçu du cycle de vie des pages ASP.NET

1voto

matt-dot-net Points 3024

Il y a 3 clés ici, parfaitement exprimées par @Alexander.

Voici un exemple de code :

 <%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

    <form runat="server">
        <asp:PlaceHolder ID="placeHolder1" runat="server" />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit"/>
    </form>

Code Behind :

using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : Page
{
    private static readonly List<String> _listOfThings = new List<String> { "John", "Mary", "Joe" };
    private List<TextBox> _myDynamicTextBoxes;

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        _myDynamicTextBoxes = new List<TextBox>();
        var i = 0;
        foreach (var item in _listOfThings)
        {
            var tbox = new TextBox {ID = "TextBox" + (i++),Text=item};
            placeHolder1.Controls.Add(tbox); //make sure you are adding to the appropriate container (which must live in a Form with runat="server")
            _myDynamicTextBoxes.Add(tbox);
        }
    }

    protected void Button1_Click(Object sender, EventArgs e)
    {
        foreach (var tbox in _myDynamicTextBoxes)
        {
            Response.Write(String.Format("You entered '{0}' in {1}<br/>", tbox.Text, tbox.ID));
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X