net mvc kendoui kendo for developer javascript c# asp.net-mvc kendo-ui

javascript - mvc - El campo de fecha dentro de Kendo Grid es nulo en el controlador



kendoui for jquery (3)

He tenido problemas similares, todo funciona bien de mi lado, pero en el lado del cliente las cosas se rompen. Mi solución es verificar la configuración regional de la computadora y verificar si el formato de fecha es correcto.

El siguiente código funciona bien en el desarrollo, pero cuando implementamos en producción, el campo fecha (initally datetime) obtiene nulo.

Incluso intentamos cambiar a cadena en lugar de datetime y todavía no funciona en nuestros servidores de clientes

Nuestra vista parcial es así: 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")) ) )

Esto es PARTE de la vista que usa la vista parcial

<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>

Y esta es la acción del controlador

//[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)); }


Su cuadrícula está vinculada a un modelo EventoEducacionFecha, que contiene un campo FechaEvent. Su acción de controlador está recibiendo el modelo EventoEducacionFecha Y una cadena llamada FechaEvent.

Cuando se publica la fila de la grilla, el valor de la columna FechaEvent se vincula al campo EventoEducacionFecha.FechaEvent y no está vinculado al parámetro de la cadena FechaEvent por separado, ya que se ha vinculado.

El archivador modelo deja de vincular un valor publicado después de la primera coincidencia que encuentra y no se vincula a todos los campos / parámetros coincidentes.

Si cambia el nombre del campo FechaEvent en getFecha () y cambia el nombre del parámetro de cadena en la acción de su controlador para que coincida, su debería comenzar a obtener un valor.

Supongo que el orden de enlace puede cambiarse ligeramente entre la depuración y la versión, pero no lo he visto personalmente ... cada vez que "duplico" los nombres de campo / parámetro en la acción de mi controlador, no ha funcionado en ambas configuraciones.


En el pasado, tuve problemas con la biblioteca de Kendo y todo lo relacionado con DateTime. Por lo general, debe convertir DateTime que está enviando su controlador desde el formato de hora UTC de JavaScript a algo que c# entiende. De lo contrario, envíela como una cadena y vea si todavía es nula o está vacía. Tengo la sensación de que enviará algo como una cadena y puede convertirlo en el lado del servidor.

En el pasado, para un selector de fecha y hora Kendo, tuve que hacer el siguiente lado del cliente en js:

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

Luego pase el meetDate a mi controlador como una cadena, y en el lado del servidor en c# :

DateTime meetDateConv = DateTime.Parse(meetingDate);