2012-05-04 7 views
0

私はASP.NETアプリケーションを構築しています。 ListViewを使っていくつかのエンティティを表示していますが、リストビューには最初のパスに項目がありません。私が意味する、彼らはページ上に表示されますが、私はページを更新すると、このコードは動作します:最初のパスにアイテムのないListView

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"); 
      } 
     } 
    } 
} 

コンソール出力:

私はリンクを開く:充填の機能を...

リフレッシュ後:フィーチャーの記入...(...)

誰でもこの原因が分かりますか?

+0

ListView1.ItemsはPage_Loadイベントの後に設定されているようです。これはすべてコードですか?通常は、fillFeaturesを1回だけ呼び出すだけです。これもあなたが望むだろうか? Page_LoadのfillFeatures呼び出しをif(!PostBack){fillFeatures();のようにラップします。 }。 –

+0

ListView1.Itemsは、私の介入なしにEntityDataSourceによって設定されます。 if(!isPostBack)を置くと、チェックボックスがいっぱいになりません。 –

+0

はい、これはPage_Loadで発生するすべてのコードです。残りはSubmitButtonのイベントです。 –

答えて

1

私は問題は、ページのloadイベントが個々のコントロールのloadイベントの前に発生しASP.NET Page Life Cycleによるものである疑いがある:

PageオブジェクトがPageオブジェクトに読み込み時のメソッドを呼び出し、その後、 再帰的に行います各子コントロールのページと、 のすべてのコントロールがロードされるまで同じです。個々のコントロールのLoadイベントは、ページのLoadイベント後に で発生します。

あなたはいくつかの選択肢があると思います。 Page.LoadComplete EventfillFeatures方法を移動:すべてのポストバックデータとビューステート データがページにとのOnLoadメソッドは、ページ上のすべてのコントロールのための と呼ばれた後にロードされた後

LoadCompleteイベントが発生します。

またはListBoxコントロールのDataBound EventからfillFeatures方法を移動します。 Page.LoadCompleteイベントが実際には2つのオプションのほうが優れているとは思うが、

+0

私は試しましたが、それはまだ動作しませんでした。非常に奇妙な... –

+0

私はasp:Buttonを持っていて、postbackURL '<%# "ManagePlace.aspx?Id =" + Eval( "id")%>'をクリックしてチェックボックスを正しくロードしますしかし、リンクを入力してEnterキーを押すと、リンクは表示されません。 –

+0

ここからどこに行くのかわかりません。 asp.netは私の特権ではありません。説明から、ページライフサイクルの問題のように聞こえました。 foreachはまだ 'LoadComplete'イベントで呼び出されていないので、何か他のことが起こっています。ページが読み込まれたときに 'Entities'が正しく挿入されていないことがありますか? –

関連する問題