Kendo ui 使用剑道网格中的函数格式化日期类型

Kendo ui 使用剑道网格中的函数格式化日期类型,kendo-ui,kendo-grid,kendo-asp.net-mvc,Kendo Ui,Kendo Grid,Kendo Asp.net Mvc,我有一个日期转换函数,它接受datetime参数并返回string。如何使用此函数格式化剑道网格中的Date列 我试过以下代码,但都不起作用 columns.Bound(x => x.ModifyDate).ClientTemplate(@Utility.GetPersianDate((DateTime)"#: ModifyDate #")); columns.Bound(x => x.ModifyDate).Template(@<text>@Utility.GetPe

我有一个日期转换函数,它接受
datetime
参数并返回
string
。如何使用此函数格式化剑道网格中的
Date

我试过以下代码,但都不起作用

columns.Bound(x => x.ModifyDate).ClientTemplate(@Utility.GetPersianDate((DateTime)"#: ModifyDate #"));

columns.Bound(x => x.ModifyDate).Template(@<text>@Utility.GetPersianDate((DateTime)@item.ModifyDate)</text>);

columns.Bound(x => x.ModifyDate).Format(@Utility.GetPersianDate(Convert.ToDateTime("#: ModifyDate")));
columns.Bound(x=>x.ModifyDate).ClientTemplate(@Utility.GetPersianDate((DateTime)“#:ModifyDate#”);
columns.Bound(x=>x.ModifyDate).Template(@@Utility.GetPersianDate((DateTime)@item.ModifyDate));
columns.Bound(x=>x.ModifyDate).Format(@Utility.GetPersianDate(Convert.ToDateTime(“#:ModifyDate”));

我还尝试在服务器端转换它,但这是不可能的,因为格式化的日期无法识别为有效日期。这并不重要,因为这只是为了展示。用户不应更改或输入该日期。如果没有任何工作,我可以考虑使用<代码> String < /C> >而不是<代码> DATECTIME//COD>并将其转换到服务器上。

实际上,您可以使用KeDO这是自己的解析/格式化函数,在简短的例子中:

@(Html.Kendo().Grid(Model.dummyHistoryList)
                .Name("Grid")
                .Columns(columns =>
                {
                   columns.Bound(model => model.dueDate).ClientTemplate("#= kendo.toString(kendo.parseDate(dueDate),'dd MMM yyyy') #");
                   columns.Bound(model => model.DueItem);
                   columns.Bound(model => model.dueAmount).Format("{0:#,##0.00}").HtmlAttributes(new { style = "text-align:right" });
                })
                .Pageable()
                //and so on....
                )
要覆盖JQuery验证,请执行以下操作:

<script type="text/javascript">
    jQuery(function ($) {
        $.validator.addMethod('date',
        function (value, element) {
            if (this.optional(element)) {
                return true;
            }

            var ok = true;
            //Here I use kendo parse to validate the format
            //you want or you can make your own/implement your
            //validation code below here. (Example)
            if ((kendo.parseDate(value, "dd/MM/yyyy")) == null){
                ok = false;
            }
            //END
            return ok;
        });
    });
</script>

jQuery(函数($){
$.validator.addMethod('date',
函数(值、元素){
if(此.可选(元素)){
返回true;
}
var-ok=true;
//这里我使用剑道解析来验证格式
//你想要或者你可以做你自己的/实现你的
//下面是验证代码。(示例)
if((kendo.parseDate(值,“dd/MM/yyyy”)==null){
ok=假;
}
//结束
返回ok;
});
});
读取KendoUI日期选择器的附加格式。只需添加解析格式:

.ParseFormats(new List<string> { "yyyy-MM-dd", "MM-dd-yyyy", "dd-MM-yyyy" })//So On...
.ParseFormats(新列表{“yyyy-MM-dd”、“MM-dd-yyyy”、“dd-MM-yyyy”})//依此类推。。。

实际上,您可以使用剑道自身的解析/格式化功能,简而言之:

@(Html.Kendo().Grid(Model.dummyHistoryList)
                .Name("Grid")
                .Columns(columns =>
                {
                   columns.Bound(model => model.dueDate).ClientTemplate("#= kendo.toString(kendo.parseDate(dueDate),'dd MMM yyyy') #");
                   columns.Bound(model => model.DueItem);
                   columns.Bound(model => model.dueAmount).Format("{0:#,##0.00}").HtmlAttributes(new { style = "text-align:right" });
                })
                .Pageable()
                //and so on....
                )
要覆盖JQuery验证,请执行以下操作:

<script type="text/javascript">
    jQuery(function ($) {
        $.validator.addMethod('date',
        function (value, element) {
            if (this.optional(element)) {
                return true;
            }

            var ok = true;
            //Here I use kendo parse to validate the format
            //you want or you can make your own/implement your
            //validation code below here. (Example)
            if ((kendo.parseDate(value, "dd/MM/yyyy")) == null){
                ok = false;
            }
            //END
            return ok;
        });
    });
</script>

jQuery(函数($){
$.validator.addMethod('date',
函数(值、元素){
if(此.可选(元素)){
返回true;
}
var-ok=true;
//这里我使用剑道解析来验证格式
//你想要或者你可以做你自己的/实现你的
//下面是验证代码。(示例)
if((kendo.parseDate(值,“dd/MM/yyyy”)==null){
ok=假;
}
//结束
返回ok;
});
});
读取KendoUI日期选择器的附加格式。只需添加解析格式:

.ParseFormats(new List<string> { "yyyy-MM-dd", "MM-dd-yyyy", "dd-MM-yyyy" })//So On...
.ParseFormats(新列表{“yyyy-MM-dd”、“MM-dd-yyyy”、“dd-MM-yyyy”})//依此类推。。。

代码不起作用的原因有很多

columns.Bound(x => x.ModifyDate).ClientTemplate(@Utility.GetPersianDate((DateTime)"#: ModifyDate #"));
这不起作用,因为服务器代码首先运行,因此无法将
“#:ModifyDate#”
转换为
日期时间。它应该是
invalidooperationexception
之类的

columns.Bound(x => x.ModifyDate).Template(@<text>@Utility.GetPersianDate((DateTime)@item.ModifyDate)</text>);`
第三行不起作用,因为
Format
应该像
Format(“{0:D}”)
一样调用,并且它不能接受任何其他参数

因此,如果您没有使用Ajax绑定,那么正确的
模板
调用应该可以做到这一点。如果这样做,您可以在服务器端将其转换,或者编写Javascript函数将日期转换为波斯语,并在
ClientTemplate
中调用它,如下所示:
.ClientTemplate(“#convertToPersian(ModifyDate)#”)

我个人建议您在服务器端这样做:

public class SomeView
{
  public DateTime ModifyDate { get; set; }

  public string ModifyDatePersian { get { return Utility.GetPersianDate(ModifyDate); } }
}

并在客户端使用它,如下所示:
.ClientTemplate(“#:ModifyDatePersian)#”)

代码不起作用的原因有很多

columns.Bound(x => x.ModifyDate).ClientTemplate(@Utility.GetPersianDate((DateTime)"#: ModifyDate #"));
这不起作用,因为服务器代码首先运行,因此无法将
“#:ModifyDate#”
转换为
日期时间。它应该是
invalidooperationexception
之类的

columns.Bound(x => x.ModifyDate).Template(@<text>@Utility.GetPersianDate((DateTime)@item.ModifyDate)</text>);`
第三行不起作用,因为
Format
应该像
Format(“{0:D}”)
一样调用,并且它不能接受任何其他参数

因此,如果您没有使用Ajax绑定,那么正确的
模板
调用应该可以做到这一点。如果这样做,您可以在服务器端将其转换,或者编写Javascript函数将日期转换为波斯语,并在
ClientTemplate
中调用它,如下所示:
.ClientTemplate(“#convertToPersian(ModifyDate)#”)

我个人建议您在服务器端这样做:

public class SomeView
{
  public DateTime ModifyDate { get; set; }

  public string ModifyDatePersian { get { return Utility.GetPersianDate(ModifyDate); } }
}

并在客户端使用它,如下所示:
.ClientTemplate(“#:ModifyDatePersian)#”)

谢谢Robert,我知道如何使用剑道函数格式化日期。但我需要调用自己的函数将日期转换为波斯日期,这不仅仅是格式化。输出类似于,
94/03/14
,这不是一个有效的日期。至于日期验证,我假设您在服务器端脚本(C#/Razor)中没有问题。问题出在Javascript上(具体来说是Jquery.validation)。它希望有(yyyy-MM-dd)供您输入。我目前参与的项目中存在日期验证问题。我要做的是,在Jquery中提供一个覆盖验证函数。我将发布另一个答案。请稍等。谢谢。谢谢JQuery验证,你是说我必须在服务器上转换它们吗?不是真的,如果你想通过desire format(例如94/03/14),那么你必须在C#(转换为dateTime)上做一些事情,这将是一件痛苦的事,但如果你的系统已经有了解决方案,那么就可以了。使用MVC KendoUI中的“.ParseFormats()”读取/启动服务器输入并提交。谢谢Robert,我知道如何使用kendo函数格式化日期。但我需要调用自己的函数将日期转换为波斯日期,这不仅仅是格式化。输出类似于,
94/03/14
,这不是一个有效的日期。至于日期验证,我假设您在服务器端脚本(C#/Razor)中没有问题。问题出在Javascript上(具体来说是Jquery.validation)。预计将有(yyyy-M)