在ModelState中,编辑Kedno网格时日期格式无效

时间:2016-09-22 15:40:10

标签: asp.net-mvc validation datetime kendo-grid currentculture

我正在使用Kedno网格开发MVC应用程序。 我有一个带有属性的模型项:

public bool IsPaid { get; set; }
public Nullable<DateTime> PaymentDate { get; set; }

在视图中的Kedno网格中:

columns.Bound(c => c.PaymentDate).Format("{0:dd-MMM-yyyy}");

当我在网格中编辑并将IsPaid设置为false时,逻辑必须将PaymentDate设置为null。

例如,我有一个物品,其中PaymentDate为2016年9月22日,IsPaid为true

在Kendo网格中编辑后,此项目设置IsPaid为false,当我单击Save Changes时,将调用控制器中的方法Update:

public ActionResult Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<ItemViewModel> items)
{
        if (ModelState.IsValid)
        {
            //
        }
}

但ModelState无效:"The value '9/22/2016 12:00:00 AM' is not valid for...". 如果PaymentDate是2016年9月1日,则ModelState有效。

另外,我按照Globalization section中的步骤进行操作。

在web.config中:

<globalization uiCulture="bg-BG" culture="bg-BG"></globalization>

在控制器中:

protected override void Initialize(RequestContext requestContext)
{
    Thread.CurrentThread.CurrentCulture =
        Thread.CurrentThread.CurrentUICulture =
            new CultureInfo(requestContext.HttpContext.Request.UserLanguages[0]);

    base.Initialize(requestContext);
}

在视图中:

@{
    var culture = System.Globalization.CultureInfo.CurrentCulture.ToString();
}

<script src="@Url.Content("~/scripts/cultures/kendo.culture." + culture + ".min.js")"></script>

<script>
    kendo.culture("@culture");
</script>

有什么建议吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

此问题与服务器和客户端上的匹配区域性无关。根据我的观察,您已经正确地遵循了本文。

模型视图无效的原因是您已将列的Format方法设置为类似于“ dd-MMM-yyyy ”的格式。尝试将格式设置为:

columns.Bound(c => c.PaymentDate).Format("{0:dd/mm/yyyy}");

或者,您可以出于测试目的删除格式,并检查日期是否正确传递。您可以稍后再放回去。