为什么我的LINQ查询会给我旧数据?

时间:2014-02-14 00:25:04

标签: c# asp.net linq

我在aspx.cs文件中有以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    epdc = new edu_portalDataContext();

    IQueryable<Assignment> _assignmentsList = 
        from assignment in epdc.Assignments
        select assignment;

    assignmentsList = _assignmentsList.GetEnumerator();
    assignmentsList.MoveNext();

    ListOfAssignments.DataSource = epdc.Assignments;
    ListOfAssignments.DataBind();
}

注意,为了让您能够理解代码:

  • 分配是我从中提取数据的数据库表的名称。
  • ListOfAssignments是Repeater控件的ID。
  • assignmentsList用于ListOfAssignments_ItemDataBound方法。

无论如何,这很简单 - 实例化数据上下文,发送基本查询,获取枚举器,将一些数据绑定到转发器。这部分有效。下一部分让我感到困惑。

稍后在代码中,我有一个与Button控件绑定的click事件。我想要发生的是,用户在某些字段中输入一些数据,用户点击按钮,程序用该数据创建一个新记录,程序将其发送到数据库,数据库存储新数据, Repeater(ListOfAssignments)使用新数据库数据进行更新,用户可以在页面上看到新数据。

以下是点击事件中的代码:

Assignment newAssignment = new Assignment
            {
                //data is entered here
                //...
            };

epdc.Assignments.InsertOnSubmit(newAssignment);
epdc.SubmitChanges();

但这是实际发生的事情:当用户点击按钮时,一切都按预期进行,除了转发器不会使用新数据更新。我做了一些调试,这是我发现的:

assignmentsList 不会使用新的数据库数据进行更新。我在Visual Studio的变量检查器中查看,LINQ查询不会引入任何新数据。就像用户从未输入任何内容一样。在他们刷新页面之前,即:当他们刷新时,Repeater会更新并显示新数据。

为什么LINQ查询不能在回发时给我新的数据?

1 个答案:

答案 0 :(得分:4)

您的点击事件发生在Page_Load之后。因此,在添加新数据之前,转发器会反弹。在PreRender中进行数据绑定。