【发布时间】:2012-05-15 14:43:31
【问题描述】:
这是我的代码:
private string[] MesiSelezionati;
protected void Page_Load(object sender, EventArgs e)
{
MesiSelezionati = new string[] { "2", "4" };
UpdateMesi();
}
override protected void OnInit(EventArgs e)
{
for (int i = 1; i <= 12; i++)
{
HtmlGenericControl meseItem = new HtmlGenericControl("a") { InnerHtml = "mese" };
meseItem.Attributes.Add("href", "javascript:void(0);");
HiddenField hf = new HiddenField();
hf.Value = "0";
hf.ID = "idMese_" + i.ToString();
meseItem.Controls.Add(hf);
panelMesi.Controls.Add(meseItem);
}
base.OnInit(e);
}
private void UpdateMesi()
{
foreach (HtmlGenericControl a in panelMesi.Controls.OfType<HtmlGenericControl>())
{
HiddenField hf = a.Controls.OfType<HiddenField>().LastOrDefault();
if (MesiSelezionati.Contains(hf.ID.Split('_').LastOrDefault()))
{
hf.Value = "1";
a.Attributes.Add("class", "box-ricerca-avanzata-item link-box selected");
}
}
}
当我调用页面时,一切正常!问题是当我调用同一个页面(所以,回发)时,多亏了 asp:LinkButton。我在if (MesiSelezionati.Contains(hf.ID.Split('_').LastOrDefault())) 上收到System.NullReferenceException。
似乎 2° 和 4° 链接的 HiddenField(对应于MesiSelezionati = new string[] { "2", "4" }; 的位置)为空。为什么?我该如何解决?
编辑:Mark M 的代码
HtmlGenericControl optionBox = new HtmlGenericControl("div");
optionBox.Attributes["class"] = "option-box";
HtmlGenericControl optionBoxItem = new HtmlGenericControl("a") { InnerHtml = " " };
optionBoxItem.Attributes.Add("href", "javascript:void(0);");
optionBoxItem.Attributes.Add("class", "option-box-item");
HtmlGenericControl optionBoxTesto = new HtmlGenericControl("a") { InnerText = Categoria.Categoria };
optionBoxTesto.Attributes.Add("href", "javascript:void(0);");
optionBoxTesto.Attributes.Add("class", "option-box-testo");
HiddenField hf = new HiddenField();
hf.Value = "0";
hf.ID = "categoria_" + Categoria.UniqueID;
optionBox.Controls.Add(optionBoxItem);
optionBox.Controls.Add(optionBoxTesto);
optionBox.Controls.Add(hf);
panelCategorieGuida.Controls.Add(optionBox);
【问题讨论】:
-
这真的很奇怪!我真的不明白为什么这种行为:O 看起来它丢失了,在回发时,Page_Load 的更新控件,我第一次调用它??????妈的……
-
是什么让你认为这是更新?您应该检查空引用发生的位置以及原因
-
嗯.. 没有任何理由让 HiddenFields 在回发时为空。这是我不明白的问题。在回发时,2° 和 4° 链接(第一次调用页面时值已更新的链接)上的 HiddenField 为空。为什么?这就是我需要解决的问题..
-
P.S.他们更新了,是的!当我第一次调用该页面时,我看到的值为“1”,而不是“0”。所以问题实际上是在回发...
标签: c# .net user-controls webforms