Kendo Grid中的日期问题

时间:2014-10-21 06:58:18

标签: sql-server asp.net-mvc kendo-ui kendo-grid

我的应用程序正在运行时区 UTC + 05:30 的服务器。我的客户端计算机具有 UTC-05:00 时区。

现在假设他在文本框中输入 12/31/1989 并保存表单,当他在kendo网格中查看详细信息时,日期显示为 12/30/1989 而不是 12/31/1989

我通过更改我的电脑的时区来调试应用程序,在调试中我找到了

  1. 在插入/更新语句被触发之前,日期不会更改。它保持 12/31/1989
  2. 在数据库日期中也存储为 12/31/1989
  3. 当我从数据库获取数据时,模型和控制器日期仍然 12/31/1989
  4. 但是当我使用以下查询以JSON格式将数据返回到kendo网格时,它会将页面上的日期显示为 12/30/1989
  5. C#

    public ActionResult GetPatients([DataSourceRequest] DataSourceRequest request, int includePatientId = 0)
    {
      return Json(this.patienModel.RetrieveActivePatients().ToDataSourceResult(request));
    }
    

    Kendo Grid

    @(Html.Kendo().Grid<RxConnectEntities.Patient>
           ().Name("PatientList")
           .Columns(columns =>
           {
             columns.Bound(p => p.PatientID).Visible(false);
             columns.Bound(p => p.Name).Width(100);
             columns.Bound(p => p.Gender).Width(80);
             columns.Bound(p => p.DateOfBirth).Width(90)
                    .Format("{0:MM/dd/yyyy}")
                    .EditorTemplateName("DateOfBirth")
                    .Filterable(false).HtmlAttributes(new { id = "gridDateOfBirth" })
                    .ClientTemplate("#: kendo.toString(kendo.parseDate(data.DateOfBirth),'MM/dd/yyyy') #");
                    columns.Bound(p => p.PhoneNumber).Title("Phone Number").Width(110);
                    columns.Command(command =>
                    {
                      command.Custom("Select").Click("OnSelectRow");
                      command.Custom("Edit").Text("Edit").Click("EditGrid");
                    }).Width(120);
             })
             .Pageable(p => p.PageSizes(true))
             .DataSource(dataSource => dataSource
             .Ajax().ServerOperation(true)
             .PageSize(5)
             .Model(m => m.Id(p => p.PatientID))
             .Read(read => read.Action("GetActivePatientList", "Order")
             .Data(@"function(){
                   return{
                     includePatientId:" + (TempData["includePatientId"] ?? 0) + @"
                   }
              }"))
              .Destroy(delete => delete.Action("Deletepatient", "Order"))
           )
        )
    

2 个答案:

答案 0 :(得分:1)

我遇到了强类型Kendo网格的类似问题。这听起来很奇怪,将强类型的一个改为JS对应解决了我的问题。我找不到任何解释,但我猜我可以明确告诉列类型=“日期”。我知道这不符合逻辑,但至少你可以试试。

schema: {
            model: {
                id: "PatientID",
                fields: {
                    PatientID: {},
                    Name: {},
                    Gender: {}
                    DateOfBirth: { type: "date" }                        
                }
            }
        }

答案 1 :(得分:0)

您可以使用DateTime.Date剥离日期的时间部分。

var testDateTime = DateTime.Now;
var testDate = dateAndTime.Date;

// Save testDate to SQL Server

这应该在保存时将时间部分设置为00:00:00