Rappelez-vous, chaque fois que vous faites tout postback, même si elle est juste pour gérer un événement, le cycle de vie de la page complète fonctionnera. Pour aider à comprendre cela, vous pouvez penser à votre code comme si tout cela était dans une grande fonction, plus comme ceci:
public partial class test : System.Web.UI.Page
{
// Page_Load runs for EVERYTHING
protected void Page_Load(object sender, EventArgs e)
{
// -- Constructor Area
StringBuilder sb = new StringBuilder();
// -- Page Init Area
// -- ViewSate is loaded
// -- Page Load Area
if (!IsPostBack)
{
sb.Append("one");
lbl.Text = sb.ToString();
}
// -- Validation controls are checked
// -- If valid, start handling events
// Handle your click event
if (cmdSb_Clicked)
{
sb.Append("two");
lbl.Text = sb.ToString();
}
// -- DataBinding Area
// -- Save ViewState
// -- Render Page: the class is turned into html that is sent to the browser
// -- Unload -- Page is disposed
}
}
Bien sûr, ce n'est pas ce qui se passe réellement, mais à partir de la pensée comme ça et vous êtes sur la bonne voie. Dans ce cas, notez que votre événement click ne s'exécutera jamais en même temps que votre code !IsPostBack
, mais que vous utilisez un nouveau StringBuilder à chaque fois.
ici pour plus d'Vérifiez les informations sur le cycle de vie de la page:
http://msdn.microsoft.com/en-us/library/ms178472.aspx
merci Joel pour une grande explication, mais je ne comprends toujours pas pourquoi dans l'exemple ci-dessous sb.Append ajouter une chaîne. Lorsque vous cliquez sur le bouton, la publication est déclenchée. Donc devrait se comporter comme précédemment. StringBuilder sb = new StringBuilder(); protected void Page_Load (expéditeur d'objet, EventArgs e) { sb.Append ("one"); lbl.Text = sb.ToString(); } protected void cmdSb_Click (expéditeur d'objet, EventArgs e) { sb.Append ("two"); lbl.Text = sb.ToString(); } –
Vous ajoutez uniquement "un" au stringbuilder c'est _not_ un postback. Lorsque vous cliquez sur des événements, il s'agit d'une publication. Est-ce que vous voyez "onetwo" dans ce cas au lieu de simplement "deux", comme je m'y attendais? –