web-dev-qa-db-fra.com

Implémentation d'IsPostBack dans le chargement des pages

Plus j'utilise ASP.NET, plus if (!IsPostBack) {} semble inutile ...

Premier exemple:

Par exemple, je viens de googler un problème, ils ont dit d'utiliser ceci dans le cadre de la solution:

if (!Page.IsPostBack)
{
   Page.LoadComplete += new EventHandler(Page_LoadComplete);
}

Ce qui fait exactement comme codé, LoadComplete ne se déclenchera que sur la première charge. Après avoir cliqué sur un bouton ou sur tout ce qui déclenche une publication, l'événement LoadComplete reste décroché, ignorant ainsi le gestionnaire d'événements. Par conséquent, leur "correction" ne fonctionne que sur la première charge = sans valeur. J'ai rapidement commenté la if (!Page.IsPostBack) {} et maintenant l'événement se déclenche toujours comme souhaité.

Deuxième exemple:

J'essaie de connecter des événements à un bouton créé dynamiquement (qui, soit dit en passant, je ne peux pas travailler [GRR!]). Je vois des exemples montrant ceci:

myEditToggleButton = new Button();
myEditToggleButton.ID = "editToggleButton"; 
//^GOTTA HAVE THIS FOR EVENTS TO WORK! (supposedly, I haven't seen it work...)
if (!IsPostBack)
{
   myEditToggleButton.Click += new EventHandler(myEditToggleButton_Click);
}
Controls.Add(myEditToggleButton);

Comme le premier exemple, je crois comprendre que l'événement ne serait pas accroché après le premier chargement de la page, donc le bouton est "inerte" après un clic (car un clic a déclenché une publication).

Question:

Quand faut-il utiliser if (!IsPostBack) {}? Je suppose que cela n'a à voir qu'avec les contrôles créés par balisage.

20
Yerg

En bref, vous l'utilisez à chaque fois que vous devez exécuter quelque chose UNIQUEMENT au premier chargement.

L'utilisation classique de Page.IsPostBack est la liaison de données/l'initialisation du contrôle.

if(!Page.IsPostBack)
{
   //Control Initialization
   //Databinding
}

Les éléments persistants sur ViewState et ControlState n'ont pas besoin d'être recréés à chaque publication, vous devez donc vérifier cette condition afin d'éviter d'exécuter du code inutile.

Une autre utilisation classique consiste à obtenir et à traiter les paramètres Querystring. Vous n'avez pas besoin de le faire lors de la publication.

17
Claudio Redi

Lorsqu'il n'est pas nécessaire de répéter l'opération autre que la première fois.

utilisez-le avec des opérations coûteuses (telles que l'obtention de données à partir d'une base de données ou le remplissage de ListItems) qui ne doivent être effectuées que lors du premier chargement de la page ou du contrôle. Si la page est publiée sur le serveur puis rechargée, il n'est pas nécessaire de répéter l'opération. En testant la valeur de IsPostBack, vous pouvez ignorer l'opération coûteuse,

6
Spooks

C'est pour le traitement des données du formulaire.

Si vous souhaitez gérer les données POSTées, vous ne devez le faire que si la page a réellement publié des données, pas au premier chargement. Par conséquent, le drapeau IsPostBack.

4
jvenema

Ce qui peut arriver si vous provoquez une publication, c'est que vous pouvez modifier l'état de vos contrôles, sans le vouloir. Par exemple, lorsque vous utilisez une grille, si vous publiez en mode édition, vous n'aurez plus accès à vos champs modifiés.

Souvent, vous devez empêcher les informations de disparaître sur une page lorsque vous accédez au serveur, c'est le but de

if(!Page.IsPostBack)
3
Brett
protected void Page_Load(object sender, EventArgs e)            
{
    if (!IsPostBack) { 
        SqlConnection conn = new SqlConnection("Data Source=-----; Database=-----; Integrated Security=True");
        SqlDataAdapter da = new SqlDataAdapter();
        conn.Open();
        da.SelectCommand = new SqlCommand("Select Command",conn);
        conn.Close();
        DataTable dt = new DataTable();
        da.Fill(dt);

        ddlSearch.DataSource = dt;
        ddlSearch.DataTextField = "---";
        ddlSearch.DataValueField = "---";
        ddlSearch.DataBind();
    }
}
1
Yasir Antaal

Vos gestionnaires d'événements doivent être câblés chaque fois que l'événement peut être déclenché (quel que soit le statut PostBack)

De plus, lors de l'ajout dynamique de contrôles, veillez à respecter l'asp cycle de vie de la page

1
StuartLC

De plus, vous devez utiliser IsPostBack si vous souhaitez initialiser des contrôles, sinon ils seront rétablis à leur valeur par défaut à chaque chargement. Cela déroutera l'utilisateur car lorsqu'il essaiera d'utiliser le formulaire, ses valeurs saisies seront réinitialisées à vos valeurs par défaut.

0
logain

Vous devez d'abord comprendre ce qu'est la publication, lorsque vous démarrez votre projet dans Visual Studio,
si tu as un if statement qui vérifie si isPostBack est true ou false dans votre Page_Load méthode, à ce stade, isPostBack est false, ce n'est pas un postback, alors qu'est-ce que la publication,
cliquez maintenant sur un button (si vous n'avez pas de bouton, veuillez en ajouter un et la méthode de clic de bouton également), à ce stade, vous renvoyez une demande au serveur, le serveur puis la réponse, ce processus est ce qu'on appelle postback, qui est déclenché en cliquant sur le button,

une chose que vous devez vraiment remarquer, le Page_Load la méthode sera à nouveau exécutée, non seulement la Button_click la méthode sera exécutée, donc maintenant, la isPostBack est true, cela signifie que c'est une publication, oui, c'est vraiment une publication, car vous avez cliqué sur le bouton.

0
Zhenxiao Hao