Ajouter des contrôles dans votre Page_Init
, pas dans votre Page_Load
. [1]
En outre, vous ne le faites pas comme il se doit. Considérez ce code
//your collection of objects goes here. It might be something different than
//this, but basically a Dictionary<int, YourType> goes fine
public Dictionary<Int32, string> Ids
{
get { return (ViewState["ids"] ?? new Dictionary<Int32, string>()) as Dictionary<Int32, string>; }
set { ViewState["ids"] = new Dictionary<Int32, string>(); }
}
protected void Page_Init(object sender, EventArgs e)
{
//load the data using your DAO
Ids = new Dictionary<int, string>();
Ids.Add(1, "http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg");
Ids.Add(2, "http://helios.gsfc.nasa.gov/image_euv_press.jpg");
foreach (var item in Ids)
{
ImageButton imb = new ImageButton()
{
ImageUrl = item.Value,
CommandArgument = item.Key.ToString(),
CommandName = "open"
};
imb.Click += new ImageClickEventHandler(imb_Click);
PH1.Controls.Add(imb);
}
}
void imb_Click(object sender, ImageClickEventArgs e)
{
Response.Write("You purchased " + Ids[int.Parse(((ImageButton)sender).CommandArgument)]);
}
[1] (CTRL + C/CTRL + V d'une autre question que je répondu la semaine dernière):
Tout ce qui doit être maintenu entre les cycles de page devraient être déclarés dans Page_Init
, et non Page_Load
.
Toutes les initialisations, comme l'ajout de gestionnaires d'événements et l'ajout de contrôles, doivent être ajoutées lors de l'initialisation, car l'état est enregistré entre les cycles de page. La gestion du contenu des contrôles et de viewstate doit se faire au Load
.
Cochez également http://msdn.microsoft.com/en-us/library/ms178472.aspx.
Init
Élevé après tous les contrôles ont été initialisé et tous les paramètres de la peau ont été appliquées. Utilisez cet événement pour lire ou initialiser les propriétés de contrôle .
.
Charge
La page appelle la méthode d'événement OnLoad sur la page, puis fait récursive le même pour chaque contrôle enfant, qui fait la même chose pour chacun de ses enfants contrôles jusqu'à ce que la page et tous les contrôles sont chargés.
Utilisez la méthode d'événement OnLoad pour définir les propriétés dans les contrôles et établir les connexions de base de données .
bien la même chose arrive quand je suis passé de Page_Load à Page_Init. Y at-il un problème avec cette ligne? ib.Click + = Purchase (g); Parce qu'il déclenche l'événement click avant de cliquer sur les boutons image! – Kubi
vérifier mon édition .. –