我有一个自定义Web控件,我需要从控件内的List对象获取对象数量的计数。在更详细的术语中,我有一个我需要维护的List属性,并且知道网页列表中存在的受众数量。不幸的是,即使我在列表中添加项目,Count也总是返回0。
在代码执行期间的各个地方,计数是正确的,但是一旦我返回.aspx页面,它就像对象已被完全擦除一样。我认为每次页面加载时我的Web控件都会覆盖这些值,但如果是这种情况,我不确定如何防止这种情况。
这是我的第一个使用其中一些技术的项目,所以我可能会接近错误。任何帮助将不胜感激。谢谢。
基础对象:
public class Audience
{
public String name { get; set; }
public String id { get; set; }
public Int16 type { get; set; }
public Audience() { }
}
可枚举的类列表<受众>:
public class Audiences : IEnumerable
{
List<Audience> audienceList = new List<Audience>();
public Audiences() { }
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}
public void addToList(List<Audience> audiences)
{
foreach (Audience audience in audiences)
{
audienceList.Add(audience);
}
}
public int count()
{
return audienceList.Count();
}
}
AudienceControl Web控件类:
public partial class AudienceControl : System.Web.UI.UserControl
{
public Audiences audienceList = new Audiences();
protected void Page_Load(object sender, EventArgs e)
{
if ((Audiences)ViewState["audienceList"]!=null)
audienceList = (Audiences)ViewState["audienceList"];
}
//Other functions to add/search/etc...
protected void add_Click(object sender, EventArgs e)
{
List<Audience> audiences = new List<Audience>();
...
audienceList.addToList(audiences);
ViewState["audienceList"] = audienceList;
}
}
.ASPX代码始终返回零。
Page_Load()
{
Response.Write("The audience count is " + AudienceControl.audienceList.count());
}
有效的代码:
protected void Page_LoadComplete(object sender, EventArgs e)
{
if (AudienceControl.audienceList != null)
{
Response.Write("The audience count is " + AudienceControl.audienceList.count());
}
}
修改 向Web Control添加了add_Click()代码,以显示调用audienceList.addToList()的位置。
找到解决方案 这个问题显然存在于页面生命周期中。当Page_Load事件触发时,不会加载自定义控件,因此即使存储到ViewState,也没有任何audienceList对象 提供任何数据。但是,当我添加Page_LoadComplete并在那里测试计数时,计数是正确的。感谢所有提出问题并提供反馈的人。我感谢您的时间和帮助。
答案 0 :(得分:1)
您是否有继承IEnumerable的原因?使用您发布的代码似乎并不是它的原因,但是显然可能比您在此处拥有的更多。无论如何,我认为问题可能出在您的GetEnumerator
方法中。试试:
return audienceList.GetEnumerator;
答案 1 :(得分:1)
所有成员变量都会在页面加载之间被删除,除非您采取措施保留它们(例如将它们存储在ViewState中,或者从会话/数据库中保存/检索它们)。