使用linq-to-sql发布的表单数据在我刷新页面之前不会显示

时间:2010-06-10 04:14:07

标签: asp.net-mvc linq-to-sql

我有一个带有表单的asp.net mvc应用程序。

提交表单时,它会使用linq-to-sql将记录添加到sql数据库中。添加记录后,控制器再次显示该表单,并应在表单上显示这些新值。但是,当它显示表单时,值为空,直到您刷新页面。

在跟踪代码时,我可以看到记录在提交时被添加到数据库中,但视图不会显示它们,除非我刷新。视图不是问题,它只显示视图模型,它在帖子后立即缺少新记录。

我知道这有点模糊,但不知道这里要包含哪些代码部分。

这是否与数据上下文生命周期有关?基本上,在发布表单时会创建一个数据上下文,然后在显示表单的方法中创建不同的数据上下文。

有关可能导致此问题的任何建议吗?

更新:

我可以在这里发布很多代码,但我会尝试给你一个简化的版本:

此代码维护志愿者作业的时间表

视图使用带有计划列表的视图模型,并显示计划表格及其关联的分配。 (儿童记录)

在发布表单时,使用新的时间表& assignemnts,创建计划记录,并创建相关的分配记录。

// Controller
public class SchedulerController : Controller
{
   ScheduleServices ScheduleSvc = new ScheduleServices();  // creates a new data context

   public ActionResult Index() 
   {
      return ShowSchedules();
   }

   [AcceptVerbs(HttpVerbs.Post)]
   public ActionResult Index(FormCollection form)
   {
       ScheduleSvc.ProcessRequest(form);
       return Index();
   }
}


public ActionResult ShowSchedules()
{
   SchedulerViewModel sched_vm = new SchedulerViewModel();
   sched_vm.EventsAndSchedules = ScheduleSvc.GetEventSchedulesFromDate();

   return View(sched_vm);
}


ProceessScheduleRequest(ScheduleRequest req)
{
   CreateSchedule(req);

   AssignmentServices AssignmentSvc = new AssignmentServices();  // creates it's own data context
   AssignmentSvc.Assign(req); 
}

2 个答案:

答案 0 :(得分:1)

我在this post(神话#10)中找到了答案。

显然,对于多个工作单元使用相同的DataContext,会导致过时数据,因为DataContext实例跟踪的对象不会仅通过重新查询来刷新。

我没有使用相同的DataCcontext来添加记录,然后显示结果,而是使用了两个单独的并修复了它。因此,我没有为整个控制器类创建一个ScheduleServices实例,而是为ProcessRequest()创建一个,为ShowSchedules()创建一个。

答案 1 :(得分:0)

保存到数据库后,您应该重定向到显示数据的控制器方法。这将导致控制器方法再次从数据库中查找数据,现在将显示新更新的记录。