2016-06-13 2 views
4

Следующий код отлично работает при разработке, но при развертывании в производство поле fecha (initally datetime) получает значение null.Поле даты внутри Kendo Grid имеет значение null для контроллера

Мы даже пытались изменения в строку вместо 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

В прошлом у меня были проблемы с библиотекой Кендо и всем, что связано с DateTime. Обычно вам нужно преобразовать DateTime, который вы отправляете контроллеру с JavaScript в формат времени UTC, на то, что понимает c#. В противном случае отправьте его в виде строки и посмотрите, все ли он пустой или пустой. У меня такое чувство, что он отправит что-то в виде строки, и вы можете преобразовать ее на стороне сервера.

В прошлом для кэндо DateTime Picker, я должен был сделать следующую сторону клиента в ЯШАХ:

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 параметра строки, как это уже было связанно.

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

Если вы переименуете поле FechaEvent в getFecha() и переименуете строковый параметр в действии вашего контроллера для соответствия, вы должны начать получать значение.

Я полагаю, что порядок привязки может немного измениться между отладкой и выпуском, но я не видел этого лично ... всякий раз, когда я «дублировал» имена полей/параметров в своем действии контроллера, он не работал в обеих конфигурациях ,

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