控制器上的Kendo Grid内的日期字段为空

时间:2016-06-13 14:34:53

标签: javascript c# asp.net-mvc kendo-ui

以下代码在开发时工作正常,但是当我们部署到生产时,字段fecha(initally datetime)变为null。

我们甚至尝试更改为字符串而不是日期时间,但它仍无法在我们的客户服务器上运行

我们的部分观点是这样的: 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));
        }

3 个答案:

答案 0 :(得分:4)

过去,我遇到过剑道图书馆以及与DateTime有关的任何问题。您通常必须将发送控制器的DateTime从JavaScript的UTC时间格式转换为c#理解的内容。否则,将其作为字符串发送,看它是否仍然为空或空。我有一种感觉它会发送一些字符串,你可以在服务器端转换它。

过去对于Kendo DateTime Picker,我必须在js中执行以下客户端:

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

然后将meetDate作为字符串传递给我的控制器,并在c#的服务器端传递:

DateTime meetDateConv = DateTime.Parse(meetingDate);

答案 1 :(得分:3)

我遇到过类似的问题,一切正常,但在客户端,事情就会破裂。我的解决方案是检查计算机的区域设置,并检查使用的日期格式是否正确。

答案 2 :(得分:1)

您的网格绑定到EventoEducacionFecha模型,该模型包含FechaEvent字段。 您的控制器操作正在接收EventoEducacionFecha模型和一个名为FechaEvent的字符串。

当发布网格行时,FechaEvent列值将绑定到EventoEducacionFecha.FechaEvent字段,并且绑定到单独的FechaEvent字符串参数,因为它已被绑定。

模型绑定程序在找到的第一个匹配项后停止绑定已发布的值,并且不绑定到所有匹配的字段/参数。

如果在getFecha()中重命名FechaEvent字段并重命名控制器操作中的字符串参数以匹配,则应该开始获取值。

我认为在调试和发布之间可能会稍微改变绑定的顺序,但我个人没有看到......每当我在控制器操作中“复制”字段/参数名称时,它在两种配置中都没有用。