我想在 ASP.NET 用户控件的 View 状态中存储一个通用列表,所以我有以下代码:
protected List<MoodleCourse> MoodleCoursesCreated
{
get
{
if (ViewState["MoodleCoursesCreated"] == null)
{
return new List<MoodleCourse>();
}
else
{
return (List<MoodleCourse>)ViewState["MoodleCoursesCreated"];
}
}
set
{
ViewState["MoodleCoursesCreated"] = value;
}
}
因此,为了向列表中添加一个项目,我调用了 MoodleCoursesCreated.Add(new MoodleCourse);
然而,看来我必须执行 MoodleCourseCreated = MoodleCourseCreated
来激活 setter ,以便列表实际存储在 View 状态中。我怀疑有更优雅的方法来实现这一点,有人有什么建议吗?干杯
最佳答案
调用 .Add() 永远不会触发 setter 。我想,你根本不需要二传手。相反,重写 Add() 方法或创建您自己的 AddMoodleCourse(MoodleCourse moodleCourse):
protected void AddMoodleCourse(MoodleCourse moodleCourse)
{
var courses = ViewState["MoodleCoursesCreated"] as List<MoodleCourse>;
if (courses == null)
{
courses = new List<MoodleCourse>();
ViewState["MoodleCoursesCreated"] = courses;
}
courses.Add(moodleCourse);
}
现在调用 MoodleCoursesCreated.AddMoodleCourse(new MoodleCourse);
关于C# 通用列表属性设置/添加行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7824330/