これは異常です。私は、次の例で私の痛みを説明してみましょう:セッション[「reportQuestionGroupingTracker」]:リピーターのOnItemDataBoundイベント中にセッションに保存中の値が消去されているようです
私は、セッション内のオブジェクトを持っています。それは文字列のリストを含んでいます。文字列が見つからないときは、文字列リテラルを介して新しいh3ヘッダがリピータに書き込まれます。
問題は次のような行です。セッション["reportQuestionGroupingTracker"] = ary;この行は、何とか(黒)魔法のように文字列値をlit.Textに取り除いているようです。値は、コードをブレークポイントし、関数のスコープから外れるまで残っているように見えます(つまり、一部は期待どおりに動作するようになります)。しかし、文字列値はASP.NETページのLiteralコントロールには決して反映されません - 彼らは常に空白です。私は、問題のある行またはその行コメントアウトかのことを
注:(!ary.Contains(headingText))場合を、ヘッダは(すべての反復は、ヘッダの書き込みをトリガするので、それらの数が多すぎ)を示しています。
protected void rptQuestionsGroupedByCountry_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
RepeaterItem item = e.Item;
ArrayList ary = new ArrayList();
if (null != Session["reportQuestionGroupingTracker"]) ary = (ArrayList)Session["reportQuestionGroupingTracker"];
if ((item.ItemType == ListItemType.Item) ||
(item.ItemType == ListItemType.AlternatingItem))
{
DataRowView dr = (DataRowView)e.Item.DataItem;
string headingText = dr["Heading"].ToString();
Literal lit = (Literal)e.Item.FindControl("LiteralHeader");
if (!ary.Contains(headingText))
{
lit.Text = String.Format(@"<h3 class=""questionGroupingHeader"">{0}</h3>", headingText);
lit.Visible = true;
ary.Add(headingText);
Session["reportQuestionGroupingTracker"] = ary;
}
}
}
私は私の頭を叩いて、時間のためにこれにしてきた - 私はそれが、この時間は動作しませんなぜ私はちょうどうまくいかないことができ、前回の同様のものの数百を行ってきました! RepeaterをDataListに変更しようとしましたが、Sessionの代わりにContext.Itemsオブジェクトを使用しようとしましたが、ArrayListの代わりにListが使用されましたが、私は邪魔です。助けて!
私はまた、IIS 6で実行しようとしました。ちょうどカッシーニの奇妙な場合に備えてですが、出力は同じです。これはASP.NET 4.0プロジェクトです。
ここでaspxページからのコードです:
<asp:Repeater ID="rptQuestionsGroupedByCountry" runat="server" OnItemDataBound="rptQuestionsGroupedByCountry_OnItemDataBound">
<HeaderTemplate><table></HeaderTemplate>
<ItemTemplate>
<tr><td>
<asp:Literal ID="LiteralHeader" runat="server" Visible="false" />
<h3 class="report-country-tag"><%#DataBinder.Eval(Container, "DataItem.Numbers")%>.<%#DataBinder.Eval(Container, "DataItem.QusetionName")%></h3>
<div class="report-content">
<%#DataBinder.Eval(Container, "DataItem.Answer")%>
<p class="date">Date Updated: <%#DataBinder.Eval(Container, "DataItem.DocumentModifiedWhen")%></p>
</div>
</td></tr>
</ItemTemplate>
<FooterTemplate></table></FooterTemplate>
いつリピータにデータバインドしますか? Sessionを使用すると、次回のページのレンダリング時にすでにすべての見出しがArrayListに含まれているとは限りません。 –
Page_Load中にそのセッション変数を消去しているので、ページが処理を開始するたびに新しくなります。 – Lanceomagnifico
リピータでDataBindを呼び出しているのはいつですか?リピーターを複数回束縛している可能性はありますか? –