这是我启动ASP的方式:Repeater:
var taskItemsList = new List<Task>();
taskItemsList = GenerateActiveList(); //generates 6 items
_taskItemsListSorted = from Task in taskItemsList
orderby Task.AssignedTo ascending , Task.DueDateTicks ascending
select Task;
taskRepeater.DataSource = _taskItemsListSorted;
taskRepeater.DataBind();
这就是我尝试使相同的转发器显示不同的列表(当用户单击按钮时此代码运行):
taskRepeater.DataSource = null; taskRepeater.DataBind();
var taskItemsList = new List<Task>();
taskItemsList = GenerateInactiveList(); //generates 5 items
_taskItemsListSorted = from Task in taskItemsList
orderby Task.AssignedTo ascending , Task.DueDateTicks ascending
select Task;
taskRepeater.DataSource = _taskItemsListSorted;
taskRepeater.DataBind();
(请注意,在第二个代码部分中,使用新函数生成不同的列表。)
问题是Repeater控件似乎仍然包含第一个代码部分中的项目。
第2节中的最后一个操作,taskRepeater.DataBind();,使ItemDataBound函数触发11次,这表明最初生成的列表项仍以某种方式包含在转发器中。
我对哪里出错了?
答案 0 :(得分:6)
唯一的问题是OnClick事件正在启动,执行您想要执行的操作,但之后页面OnLoad正在启动并将内容替换为原始内容。要解决这个问题,只需在OnLoad页面上执行此操作:
if (!IsPostBack)
// Bind the repeater
答案 1 :(得分:1)
在调用第2节代码之前,只需执行此操作,
DataTable dt = new DataTable();
taskRepeater.DataSource = dt;
taskRepeater.DataBind();