【问题标题】:Kendo date parsing in grid with incell editing, ASP.NET MVC使用 incell 编辑、ASP.NET MVC 在网格中解析剑道日期
【发布时间】:2015-11-05 06:18:55
【问题描述】:

我知道这是剑道日期解析的常见问题,但是经过 2 天的努力,我仍然无法解决我的问题。 我有网格,它可以动态地将记录添加到我的模型中的嵌套集合中:

@( Html.Kendo().Grid(Model.GTDGoods)
       .Name("GTDGoods")
       .ToolBar(toolbar => { toolbar.Create(); })
       .Columns(columns =>
{
 columns.Bound(p => p.GTD_ID).Hidden()
.ClientTemplate("#= GTD_ID #" +
"<input type='hidden' name='GTDGoods[#= index(data)#].GTD_ID' value='#= GTD_ID #'  />");

columns.Bound(p => p.GOOD_NO)
.ClientTemplate("#= GOOD_NO #" +
"<input type='hidden' name='GTDGoods[#= index(data)#].GOOD_NO' value='#= GOOD_NO #'/>");

columns.Bound(p => p.DATE)
.ClientTemplate("#=kendo.toString(kendo.parseDate(DATE), 'dd.MM.yyyy') #" +
"<input type='hidden' name='GTDGoods[#= index(data)#].DATE' value='#= kendo.toString(kendo.parseDate(DATE), 'dd.MM.yyyy') #'/>");

columns.Command(command => { command.Destroy(); });

})
.Editable(editable => editable.Mode(GridEditMode.InCell)
.CreateAt(GridInsertRowPosition.Bottom))
.DataSource(dataSource =>dataSource.Ajax()
            .Model(model =>{
                            model.Id(u => u.ID);
                            model.Field(u => u.GTD_ID).DefaultValue(Model.ID);
                           })
.ServerOperation(false)))

我在服务器上收到了集合,一切正常,除了DATE 属性。

我的GTDGood 模型有UIHint

[UIHint("Date")]
public DateTime DATE { get; set; }

Date编辑器模板是:

 @model DateTime?

<script src="~/scripts/kendo/kendo.culture.ru-ru.js"></script>
<script type="text/javascript">    
    kendo.culture("ru-RU");
</script>

@(Html.Kendo().DatePickerFor(m => m))

当我在网格中更改DATE 的值时出现问题,错误消息显示"The field DATE must be a date""The specified value "01/01/0001" does not conform to the required format, "yyyy-MM-dd"。即使我以“yyyy-MM-dd”格式输入日期,datepicker texbox 也会显示为空。 此外,我的日期选择器在网格之外也能正常工作,例如。当我像@Html.EditorFor(e=&gt;e.DATE) 一样使用它时。

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

    我们终于找到了解决办法,把这个加到_Layout.cshtml:

    <script src="@Url.Content("~/Scripts/kendo/2014.1.318/cultures/kendo.culture.en-GB.min.js")"></script>
    
        @{
            var culture = System.Threading.Thread.CurrentThread.CurrentCulture.ToString();
        }
        <script>
            kendo.culture("@culture");
            var culture = kendo.culture();
            culture.calendar.patterns.F = "dd/MM/yyyy";
        </script>
    

    【讨论】:

      【解决方案2】:

      如果(如)你有:

      public DateTime DATE { get; set; }
      

      这里应该没有什么可以“解析”的:

      kendo.toString(kendo.parseDate(DATE), 'dd.MM.yyyy')
      

      而只是直接格式化:

      kendo.toString(DATE, 'dd.MM.yyyy')
      

      或者,也许根本没有格式化:

      columns.Bound(p => p.DATE)
      .ClientTemplate("#= DATE #" +
      "<input type='hidden' name='GTDGoods[#= index(data)#].DATE' value='#= DATE #'/>");
      

      【讨论】:

      • 您尝试过按原样使用 DATE 吗?
      • 我尝试了很多方法,如果我在网格外使用它,我的日期选择器工作正常,我认为问题出在 ClientTemplate 或网格本身。
      • 但是在尊重原生格式的情况下,您是否能够编辑和保存日期?或者您可以使用像 yyyy-MM-dd 这样被广泛接受的 ISO 样式格式吗?
      • 不,由于错误,我无法保存日期。我尝试输入 yyyy-MM-dd 但文本框不接受它。
      【解决方案3】:

      您是否尝试将格式添加到 DatePickerFor?

      @(Html.Kendo().DatePickerFor(m => m)).Format("dd.MM.yyyy").Culture("ru-RU"));
      

      @Html.Kendo().DatePickerFor(m => m).Format("dd.MM.yyyy").Culture("ru-RU");
      

      【讨论】:

        【解决方案4】:

        变化:

        [UIHint("Date")]
        public DateTime DATE { get; set; }
        

        [UIHint("Date")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy}")]
        public DateTime DATE { get; set; }
        

        【讨论】:

          【解决方案5】:
              //This code works for me
          
              @(Html.Kendo().Grid<DemoKendoScheduler.Models.DateParsing>()
                     .Name("GTDGoods")
                     .ToolBar(toolbar => { toolbar.Create(); })
                     .Columns(columns =>
              {
                  columns.Bound(p => p.GTD_ID).Hidden()
                 .ClientTemplate("#= GTD_ID #" +
                 "<input type='hidden' name='#= GTD_ID#' value='#= GTD_ID #'  />");
          
                  columns.Bound(p => p.GOOD_NO)
                  .ClientTemplate("#= GOOD_NO #" +
                  "<input type='hidden' name='#= GOOD_NO#' value='#= GOOD_NO #'/>");
          
                  columns.Bound(p => p.DATE)
                  .ClientTemplate("#=kendo.toString(kendo.parseDate(DATE), 'dd.MM.yyyy') #" +
                  "<input type='hidden' name='#= DATE#]' value='#= kendo.toString(kendo.parseDate(DATE), 'dd.MM.yyyy') #'/>");
          
                  columns.Command(command => { command.Destroy(); });
          
              })
              .Editable(editable => editable.Mode(GridEditMode.InCell)
              .CreateAt(GridInsertRowPosition.Bottom))
              .DataSource(dataSource => dataSource.Ajax()
                          .Model(model =>
                          {
                              model.Id(u => u.GTD_ID);
                              //model.Field(u => u.GTD_ID);
                          })
              .ServerOperation(false)))
          
          //Model
           public class DateParsing
              {
                  public int GTD_ID { get; set; }
                  public string GOOD_NO { get; set; }
                  [UIHint("Date")]
                  public DateTime DATE { get; set; }
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多