我有一个带有“es-MX”文化的 asp.net MVC 应用程序。这是我的 web.config 文件中的内容:
<globalization enableClientBasedCulture="true" uiCulture="es-MX" culture="es-MX"></globalization>
而且,这就是我的 _Layout 页面中的内容:
<script type="text/javascript">
$(function () {
//set current to the "es-MX" culture script
kendo.culture("es-MX");
})
</script>
我有一个这样的剑道 DatePicker:
@(Html.Kendo().DatePickerFor(model => model.StartDate)
.HtmlAttributes(new { @class = "input-field" })
)
当我将表单回发到我的控制器时,该StartDate
字段为空。
这是我从服务器得到的响应:
"Errors":{"StartDate":{"errors":["值 \u002707/10/2016 12:00:00 am\u0027 对 Fecha de Inicio 无效。"]}}
顺便说一句,发送到服务器的请求的接受语言是“en-US”,我觉得很奇怪。
更新:
我尝试为 DateTime 使用自定义模型绑定器,如下所示:
public class DateTimeModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (string.IsNullOrWhiteSpace(value.AttemptedValue))
return null;
DateTime dateTime;
var isDate = DateTime.TryParse(value.AttemptedValue, Thread.CurrentThread.CurrentUICulture,
DateTimeStyles.None, out dateTime);
if (!isDate)
{
bindingContext.ModelState.AddModelError(bindingContext.ModelName, "La fecha es válido.");
return DateTime.UtcNow;
}
return dateTime;
}
}
但是,看起来问题出在传递给控制器的日期的时间部分。07/10/2016 12:00:00 a. m.
“es-MX”和“en-US”文化都不会将该值识别为日期。