2015-01-31 22 views
0

У меня проблемы с DHTMLX scheduler, особенно вокруг повторяющихся событий.DHTMLX Планировщик повторяющихся событий

Я попытался выполнить приведенную здесь документацию http://blog.scheduler-net.com/post/recurring-events-calendar-view-asp-net.aspx. Однако, похоже, он не работает.

Я могу создать базовый планировщик без каких-либо проблем. Проблема, которую я сейчас вижу, заключается в том, что любое созданное событие не будет сохраняться в БД. Это то, что у меня есть до сих пор.

Модель:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
[DHXJson(Alias = "id")] 
public int Id { get; set; } 

[DHXJson(Alias = "text")] 
public string Description { get; set; } 

[DHXJson(Alias = "start_date")] 
public DateTime StartDate { get; set; } 

[DHXJson(Alias = "end_date")] 
public DateTime EndDate { get; set; } 

[DHXJson(Alias="event_length")] 
public int event_length { get; set; } 

[DHXJson(Alias = "rec_type")] 
public string rec_type { get; set; } 

[DHXJson(Alias = "event_pid")] 
public int event_pid { get; set; } 

Контроллер:

public ActionResult Save(int? id, FormCollection actionValues) 
{ 
    var action = new DataAction(actionValues); 
    ApplicationDbContext data = new ApplicationDbContext(); 
    try 
    { 
     var changedEvent = (Appointment)DHXEventsHelper.Bind(typeof(Appointment), actionValues); 
     //operations with recurring events require some additional handling 
     bool isFinished = deleteRelated(action, changedEvent, data); 
     if (!isFinished) 
     { 
      switch (action.Type) 
      { 

       case DataActionTypes.Insert: 
        data.Appointment.Add(changedEvent); 
        if (changedEvent.rec_type == "none")//delete one event from the serie 
         action.Type = DataActionTypes.Delete; 
        break; 
       case DataActionTypes.Delete: 
        changedEvent = data.Appointment.SingleOrDefault(ev => ev.Id == action.SourceId); 
        data.Appointment.Remove(changedEvent); 
        break; 
       default:// "update" 
        var eventToUpdate = data.Appointment.SingleOrDefault(ev => ev.Id == action.SourceId); 
        DHXEventsHelper.Update(eventToUpdate, changedEvent, new List<string>() { "id" }); 
        break; 
      } 
     } 
     data.SaveChanges(); 
     action.TargetId = changedEvent.Id; 
    } 
    catch 
    { 
     action.Type = DataActionTypes.Error; 
    } 

    return (new AjaxSaveResponse(action)); 
} 
protected bool deleteRelated(DataAction action, Appointment changedEvent, ApplicationDbContext context) 
{ 
    bool finished = false; 
    if ((action.Type == DataActionTypes.Delete || action.Type == DataActionTypes.Update) && !string.IsNullOrEmpty(changedEvent.rec_type)) 
    { 
     // context.Recurrings.DeleteAllOnSubmit(from ev in context.Recurrings where ev.event_pid == changedEvent.id select ev); 
    } 
    if (action.Type == DataActionTypes.Delete && (changedEvent.event_pid != 0 && changedEvent.event_pid != null)) 
    { 
    // Recurring changed = (from ev in context.Recurrings where ev.id == action.TargetId select ev).Single(); 
    // changed.rec_type = "none"; 
     finished = true; 
    } 
    return finished; 
} 

Любая помощь или идеи?

ответ

0

Попробуйте изменить способ возврата метода изменения на «ContentResult». Также загляните в свой ApplicationDbContext и посмотрите, можете ли вы вытащить некоторые жестко запрограммированные значения db из этой таблицы, когда ваш индекс загружается. Вот моя копия. У меня были те же проблемы, пока я не использовал linq для классов для создания модели/EF, и мой контекст основан на этом. У меня была такая же проблема, когда я создал свой собственный «легкий» интерфейс, потому что я не хотел использовать EF.

public ContentResult Save(int? id, FormCollection actionValues) 
    { 
     var action = new DataAction(actionValues); 
     var context = new SchedulerDataContext(); 
     Int64 source_id = Int64.Parse(actionValues["id"]); 
     try 
     { 
      var changedDelEvent = (Delivery)DHXEventsHelper.Bind(typeof(Delivery), actionValues); 
      var changedRecEvent = (Recurring)DHXEventsHelper.Bind(typeof(Recurring), actionValues); 
      //operations with recurring events require some additional handling 
      bool isFinished = deleteRelated(action, changedRecEvent, context); 
      if (!isFinished) 
      { 
       switch (action.Type) 
       { 
        case DataActionTypes.Insert: 
         context.Recurrings.InsertOnSubmit(changedRecEvent); 
         context.SubmitChanges(); 
         break; 
        case DataActionTypes.Delete: 
         changedRecEvent = context.Recurrings.SingleOrDefault(d => d.id == source_id); 
         if (changedRecEvent != null) 
         { 
          context.Recurrings.DeleteOnSubmit(changedRecEvent); 
         } 
         context.SubmitChanges(); 
         break; 
        default:// "update"           
         var eventToUpdate = context.Deliveries.SingleOrDefault(d => d.DeliveryID == source_id); 
         DHXEventsHelper.Update(eventToUpdate, changedRecEvent, new List<string> { "id" }); 
         if (eventToUpdate != null && eventToUpdate.RouteID != changedRecEvent.id) 
         { 
          var routeToUpdate = context.Routes.SingleOrDefault(d => d.RouteID == changedRecEvent.id); 
          eventToUpdate.Route = routeToUpdate; 
         } 
         context.SubmitChanges(); 
         break; 
       } 
       action.TargetId = changedRecEvent.id; 
      } 
     } 
     catch 
     { 
      action.Type = DataActionTypes.Error; 
     } 

     return (new AjaxSaveResponse(action));   
    } 
+0

Вы заметите, что я пытаюсь заставить работу работать, поэтому у меня есть два «измененных», но crud для событий без рекурсивных работ просто отлично. – user1040975

0

Периодическая расширение (dhtmlxscheduler_recurring.js) не признает аннотаций DHXJson псевдонимов, которые вы используете на свойствах класса сущностей (очень разочаровывает). Поэтому вы должны называть столбцы/свойства класса объектов точно, как их ожидает dhtmlxscheduler_recurring.js, хотя API-интерфейс базового планировщика предоставляет вам возможность индивидуального наименования с использованием аннотаций псевдонимов DHXJson.

Смежные вопросы