【问题标题】:Unable to bind data to Kendo Scheduler无法将数据绑定到 Kendo 调度程序
【发布时间】:2014-12-01 12:05:40
【问题描述】:

我有这个剑道调度程序,它显示在视图中但没有任何数据。

视图上的调度器:

@(Html.Kendo().Scheduler<ProjName.Models.ScheduleInspectionModel>()
    .Name("scheduler")
    .Views(views =>
    {
        views.DayView();
        views.WorkWeekView();
        views.WeekView();
        views.MonthView(mv => mv.Selected(true));
        views.AgendaView();
    })
    .Timezone("Etc/UTC")
    .DataSource(d => d
        .Read("ControllerName", "GetScheduleInspections")
    )
)

数据源调用下面的控制器方法:

public ActionResult GetScheduleInspections([DataSourceRequest]DataSourceRequest request)
{
    ScheduleInspectionModel sim = new ScheduleInspectionModel();
    var gsio = sim.getScheduleInspections();

    List<ScheduleInspectionModel> list = new List<ScheduleInspectionModel>();

    if (gsio.scheduleinspections != null)
    {
        foreach (wsScheduleInspection.scheduleInspectionOutput scheduleInspection in gsio.scheduleinspections)
        {
            ScheduleInspectionModel sim2 = new ScheduleInspectionModel
            {
                GlobalEquipConditionId = scheduleInspection.globalEquipmentCondition.id,
                Description = scheduleInspection.globalEquipmentCondition.code,
                Start = DateTime.Now,
                End = DateTime.Now.AddHours(2),
                Title = scheduleInspection.globalEquipmentCondition.code,
                IsAllDay = true

            };

            list.Add(sim2);
        }
    }
    return Json(list.ToDataSourceResult(request));
}

但此方法永远不会运行,尽管它位于调度程序数据源属性上。它应该运行该方法并返回检查列表。我不知道为什么方法没有被击中。例如,对于 Kendo Grid,一旦加载页面,就会点击 Datasource Read 上的方法。

【问题讨论】:

    标签: kendo-ui kendo-asp.net-mvc kendo-scheduler


    【解决方案1】:

    尝试确保您的定义包含这两项,因为我认为它们是必需的。

    .Date(new DateTime(2013, 6, 13))
    .StartTime(new DateTime(2013, 6, 13, 7, 00, 00))
    

    编辑

    我能够让以下代码工作:

    型号

    // NOTE: It's important that your model class implements ISchedulerEvent
    public class TaskViewModel : ISchedulerEvent
    {
        public string Title { get; set; }
        public string Description { get; set; }
        public bool IsAllDay { get; set; }
        public DateTime Start { get; set; }
        public DateTime End { get; set; }
        public string StartTimezone { get; set; }
        public string EndTimezone { get; set; }
        public string RecurrenceRule { get; set; }
        public string RecurrenceException { get; set; }
    }
    

    SchedulerController.cs

    public class SchedulerController : Controller
    {
        // GET: Scheduler
        public ActionResult Index()
        {
            var model = new SchedulerViewModel();
    
            // In this case, it doesn't matter what this model is really since we're using AJAX binding
            return View(model);
        }
    
        // I usually have my binding methods for Kendo use HttpPost
        [HttpPost]
        public ActionResult GetData([DataSourceRequest] DataSourceRequest request)
        {
            var data = new List<TaskViewModel>
                {
                    new TaskViewModel
                        {
                            Start = new DateTime(2014, 12, 1, 8, 0, 0),
                            End = new DateTime(2014, 12, 1, 17, 0, 0),
                            Title = "Task 1"
                        }
                };
    
            return Json(data.ToDataSourceResult(request));
        }
    }
    

    Index.cshtml(视图)

    @(Html.Kendo().Scheduler<TaskViewModel>()
        .Name("scheduler")
        .Views(views =>
        {
            views.DayView();
            views.WorkWeekView();
            views.WeekView();
            views.MonthView(mv => mv.Selected(true));
            views.AgendaView();
        })
        .Timezone("Etc/UTC")
        .DataSource(d => d
            .Read("GetData", "Scheduler")
        ))
    

    如果这对您不起作用,我会确保您的版本(用于 Kendo、jQuery 等)是正确的。希望这会有所帮助。

    【讨论】:

    • 感谢您的回答。我试过了,但没有任何改变。而且我认为它们不是必需的……还有其他建议吗?
    • 试试用[HttpPost] 标记控制器方法吧?或将您的退货更改为 AllowGet
    • 也不是,方法还是没有调用
    • 嗯,我将不得不在午餐或今晚尝试一些东西,因为我在日常工作中不使用剑道。
    • 嗨!我可以从哪里获得 ISchedulerEvent
    【解决方案2】:

    是的,调度程序读取一旦被调用就会被调用。但它可能无法按预期获取正确格式的数据。所以它无法绑定数据。如果您可以检查这些修改:

    1) 按照example 中的定义,在调度程序的“DataSource”中定义“Model”。

    2) 操作方法还应返回“MyModel”类的对象(定义调度程序的模型)
    不是“ScheduleInspectionModel”类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多