我有一个日期转换函数,它接受datetime
参数并返回string
。如何使用此函数格式化Kendo Grid中的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")));
我也尝试在服务器端转换它,但这是不可能的,因为格式化的日期不被识别为有效日期。这并不重要,因为它只是为了展示。用户不应该更改或输入该日期。如果无效,我可以考虑使用string
代替DateTime
并在服务器上进行转换。
答案 0 :(得分:3)
您的代码不起作用的原因有多种。
columns.Bound(x => x.ModifyDate).ClientTemplate(@Utility.GetPersianDate((DateTime)"#: ModifyDate #"));
这不起作用,因为服务器代码首先运行,因此"#: ModifyDate #"
无法转换为DateTime
。它应该是InvalidOperationException
或其他东西。
columns.Bound(x => x.ModifyDate).Template(@<text>@Utility.GetPersianDate((DateTime)@item.ModifyDate)</text>);`
由于奇怪的Template
电话,第二行无效。它应该像这样调用:.Template(item => Utility.GetPersianDate(item.ModifyDate))
除非你使用Ajax绑定,否则它将完成这项工作,在这种情况下你不能使用Template
方法。
columns.Bound(x => x.ModifyDate).Format(@Utility.GetPersianDate(Convert.ToDateTime("#: ModifyDate")));`
第三行不起作用,因为Format
应该被调用为Format("{0:D}")
,并且它不能接受任何其他参数。
因此,如果您没有使用Ajax绑定,那么正确的Template
调用应该可以解决问题。如果你这样做,那么你可以在服务器端转换它,或者编写一个Javascript函数将日期转换为波斯语并在ClientTemplate
中调用它,如下所示:.ClientTemplate("# convertToPersian(ModifyDate) #")
我个人建议你在服务器端这样做:
public class SomeView
{
public DateTime ModifyDate { get; set; }
public string ModifyDatePersian { get { return Utility.GetPersianDate(ModifyDate); } }
}
并在客户端使用它,如下所示:.ClientTemplate("#: ModifyDatePersian) #")
。
答案 1 :(得分:1)
实际上,您可以使用Kendo自己的解析/格式功能,简而言之:
@(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>
将其他格式读取到KendoUI DatePicker。只需添加parseFormat:
.ParseFormats(new List<string> { "yyyy-MM-dd", "MM-dd-yyyy", "dd-MM-yyyy" })//So On...