данные формы, отправленные с использованием linq-to-sql, не отображаются, пока я не обновлю страницу - PullRequest
0 голосов
/ 10 июня 2010

У меня есть приложение asp.net mvc с формой.

Когда вы отправляете форму, она добавляет записи в базу данных sql с linq-to-sql. После добавления записей контроллер снова отображает форму и должен показать эти новые значения в форме. Но при отображении формы значения остаются пустыми, пока вы не обновите страницу.

При трассировке кода я вижу записи, добавляемые в базу данных при отправке, но представление не отображает их, пока я не обновлю. Представление не является проблемой, оно просто отображает модель представления, которая пропускает новые записи сразу после публикации.

Я знаю, что это немного расплывчато, но не был уверен, какие части кода включить сюда.

Может ли это быть как-то связано с жизненным циклом контекста данных? По сути, при публикации формы создается контекст данных, затем в методе, который отображает форму, создается другой контекст данных.

Любые предложения о том, что может быть причиной этого?

Обновление:

Я могу выложить здесь много кода, но я постараюсь дать вам упрощенную версию:

В этом коде ведется график работы волонтеров

Представление использует модель представления со списком расписаний и отображает форму расписаний и связанных с ними назначений. (дочерние записи)

Когда форма публикуется с новым расписанием и назначениями, создается запись расписания и создаются связанные записи назначений.

// 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 ]

1 голос
/ 11 июня 2010

Я нашел ответ в этом посте (миф № 10).

Очевидно, что при использовании одного и того же DataContext для нескольких единиц работы приводит к устареванию данных , поскольку объекты, отслеживаемые экземпляром DataContext, не обновляются просто путем запроса.

Вместо того, чтобы использовать один и тот же DataCcontext как для добавления записей, так и для отображения результатов, я использовал два отдельных, и это исправило это. Поэтому вместо одного экземпляра ScheduleServices для всего класса контроллера я создаю один для ProcessRequest () и отдельный для ShowSchedules ().

0 голосов
/ 10 июня 2010

После сохранения в базе данных вы должны перенаправить на метод контроллера, который отображает данные. Это заставит метод контроллера снова искать данные из базы данных, и теперь будет отображаться обновленная запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...