2016-06-13 45 views
4

以下代碼在開發過程中工作正常,但是當我們部署到生產時,字段fecha(初始化日期時間)變爲null。Kendo Grid內部的日期字段在控制器上爲空

我們甚至試圖改變字符串,而不是datetime和其客戶的服務器上仍然不起作用

我們的部分觀點是這樣的: fecha.chstml

@using xx.Relacionamiento.Modelo.Bussiness.Entities 
@model EventoEducacionFecha 
@using Kendo.Mvc.UI 

<script type="text/javascript"> 
    $(function() { 
     kendo.culture("es-CO"); 
    }) 

    function error_handler(e) { 
     if (e.errors) { 
      var message = "Errors:\n"; 
      $.each(e.errors, function (key, value) { 
       if ('errors' in value) { 
        $.each(value.errors, function() { 
         message += this + "\n"; 
        }); 
       } 
      }); 
      alert(message); 
     } 
    } 

    function getFecha() { 
     debugger 
     var fecha = $("#FechaEvent").val(); 
     return { 
      FechaEvent: fecha 
     }; 
    } 
</script> 
@(Html.Kendo().Grid<EventoEducacionFecha>() 
    .Name("grid") 
    .Columns(columns => 
    { 
     columns.Bound(p => p.EventoEducacionFechaId).Hidden(); 
     columns.Bound(p => p.FechaEvent).Title("Fecha Evento").ClientTemplate("#= kendo.toString(kendo.parseDate(FechaEvent, 'yyyy-MM-dd'), 'MM/dd/yyyy') #"); 
     columns.Bound(p => p.HoraInicio); 
     columns.Bound(p => p.HoraFin); 
     columns.Command(command => 
     { 
      command.Edit().Text("Editar"); 
      //command.Destroy(); 
      command.Custom("Borrar").Click("openWindowConfirmDelete").HtmlAttributes(new { data_NomCol = "FechaEvent" }); 
     }).Width(250).Title("Acciones"); 
    }) 
    .ToolBar(toolbar => toolbar.Create().Text("Agregar Fecha")) 
    .Editable(editable => editable.Mode(GridEditMode.InLine).DisplayDeleteConfirmation(false)) 
    .Pageable() 
    .Sortable() 
    .Scrollable() 
    //.HtmlAttributes(new { style = "height:550px;" }) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .PageSize(20) 
     .Events(events => events.Error("error_handler")) 
     .Model(model => 
     { 
      model.Id(p => p.EventoEducacionFechaId); 
      model.Field(a => a.EventoEducacionFechaId).Editable(false); 
      model.Field(a => a.FechaEvent).Editable(true); 
      model.Field(a => a.HoraInicio).Editable(true); 
      model.Field(a => a.HoraFin).Editable(true); 
     }) 
     .Create(update => update.Action("Fechas_Create", "EventosEducacion").Data("getFecha")) 
     .Read(read => read.Action("GetFechas", "EventosEducacion").Data("getDatoEventoId")) 
     .Update(update => update.Action("Fecha_Update", "EventosEducacion")) 
     .Destroy(update => update.Action("Fecha_Destroy", "EventosEducacion")) 
    ) 
) 

這是視圖的一部分使用該局部視圖

<div class="row oculto" id="VerFecha"> 
       <div class="col-md-12"> 
        <div class="form-group"> 
         <div id="mostrarFecha_div"></div> 
         @*@Html.Partial("~/Views/EventosEducacion/Fechas.cshtml",null,null)*@ 
        </div> 
       </div> 

這是控制器動作

//[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Fechas_Create([DataSourceRequest] DataSourceRequest request, EventoEducacionFecha EducaFecha, string FechaEvent) 
     { 
      if (EducaFecha.FechaEvent != null && EducaFecha.HoraInicio != null && EducaFecha.HoraFin != null) 
      { 
       LstEventoEducacionFecha.Add(new EventoEducacionFecha { 
       EventoEducacionFechaId = Guid.NewGuid(), 
       EventoId = Guid.Empty, 
       HoraFin = EducaFecha.HoraFin, 
       FechaEvent = DateTime.Parse(FechaEvent), 
       HoraInicio = EducaFecha.HoraInicio, 
       }); 
       EducaFecha.EventoEducacionFechaId = LstEventoEducacionFecha.OrderBy(o => o.EventoEducacionFechaId).Select(s => s.EventoEducacionFechaId).FirstOrDefault(); 
       return Json(new[] { EducaFecha }.ToDataSourceResult(request)); 
      } 
      return Json(new[] { EducaFecha }.ToDataSourceResult(request)); 
     } 

回答

4

過去,我在Kendo的庫和任何與DateTime相關的問題上都存在問題。您通常必須將發送控制器的DateTime從JavaScript的UTC時間格式轉換爲c#可以理解的內容。否則,將其作爲字符串發送並查看它是否仍爲空或空。我有一種感覺,它會以字符串形式發送某些內容,並且可以在服務器端進行轉換。

在過去的劍道日期時間選擇器,我不得不做的js以下客戶端:

var meetDatePicker = $("#MeetingDate").data("kendoDatePicker"); 
var mDate = new Date(meetDatePicker.value()); 
var meetDate = mDate.toUTCString(); 

然後通過meetDate我控制器作爲一個字符串,並在服務器端的c#

DateTime meetDateConv = DateTime.Parse(meetingDate); 
3

我有類似的問題,一切工作正常,但在客戶端事情突破。我的解決方案是檢查電腦的區域設置,並檢查使用的日期格式是否正確。

1

你的網格綁定到一個EventoEducacionFecha模型,該模型包含一個FechaEvent字段。 您的控制器操作正在接收EventoEducacionFecha模型和一個名爲FechaEvent的字符串。

當網格行張貼的FechaEvent列的值被綁定到EventoEducacionFecha.FechaEvent領域,是綁定到單獨FechaEvent字符串參數,因爲它已被綁定。

模型聯編程序在找到第一個匹配後停止綁定發佈的值,並且不綁定到所有匹配的字段/參數。

如果您重命名getFecha()中的FechaEvent字段並重命名控制器操作中的字符串參數以匹配,您應該開始獲取值。

我想綁定的順序可能會在調試和發佈之間稍微改變,但我沒有親眼看到......每當我在控制器動作中「重複」字段/參數名稱時,它在兩種配置中都不起作用。

相關問題