I’m building an ASP.NET application. I’m using a ListView to show some Entities however my listview doesn’t have items on the first pass. I mean, they show up on the page, but this code only works when I refresh the page:
protected void Page_Load(object sender, EventArgs e)
{
fillFeatures();
}
private void fillFeatures()
{
using (Entities myEntities = new Entities())
{
System.Diagnostics.Debug.Write("Filling features.. \n");
foreach (ListViewItem item in ListView1.Items)
{
System.Diagnostics.Debug.Write("FOR \n");
CheckBox checkbox = (CheckBox)item.FindControl("Checkbox");
TextBox description = (TextBox)item.FindControl("descriptionTextbox");
//Try to get an existing relation
int featureId = Int32.Parse(((Label)item.FindControl("idLabel")).Text);
PlaceHasFeature phf = (from p in myEntities.PlaceHasFeature
where p.place_id == placeId && p.feature_id == featureId
select p).SingleOrDefault();
if (phf != null)
{
System.Diagnostics.Debug.Write("Checking " + phf.Feature.name + "\n");
//Relation exists
checkbox.Checked = true;
description.Text = phf.description;
}
else
{
System.Diagnostics.Debug.Write("Didn't find relation for " + featureId + "\n");
}
}
}
}
Console output:
When I open the link: Filling features…
After refresh: Filling features… FOR FOR FOR (…)
Anyone knows the cause of this?
I suspect the issue is due to the ASP.NET Page Life Cycle, where the page load event occurs before the individual controls load event:
I believe you have a couple of options. Move the
fillFeaturesmethod to the Page.LoadComplete Event:Or move the
fillFeaturesmethod to the ListBox’s DataBound Event. Though I would suspect that the Page.LoadComplete Event is really the better of the two options.