我使用两种日期格式:
我创建了编辑器模板来处理我所有不同的输入。
我知道当使用不在所选文化中的日期格式时,剑道有一些issues。因此,我总是会收到验证错误“字段MEAS DATE必须是日期。”
我已经按照他们的建议添加了代码。这样做可以解决格式问题。但由于某种原因,我的TextBox字段的验证中断。虽然输入的数据是正确的,但会显示验证错误。该错误仅显示没有任何文本的小警告图标。
有没有理由发生这种情况?
模型中的字段:
[DisplayName("CONTRACT")]
[Required(ErrorMessage="{0} IS REQUIRED")
[UIHint("TextInput")]
[AdditionalMetadata("Class", "green-field")]
[AdditionalMetadata("MaxLength", "10")]
public string ContractNo { get; set; }
[DisplayName("MEAS DATE")]
[UIHint("DateInput")]
[AdditionalMetadata("Class", "green-field")]
[AdditionalMetadata("Format", "dd.MM.yyyy")]
public DateTime MeasurementDate { get; set; }
DateTime的编辑器模板:
@model DateTime?
@{
var values = ViewData.ModelMetadata.AdditionalValues;
var name = ViewData.ModelMetadata.PropertyName;
}
@if (values["Class"].ToString().Equals("blue-field"))
{
@(Html.Kendo().DatePickerFor(m => m)
.Format(values["Format"].ToString())
.HtmlAttributes(new { @class = values["Class"] })
.Enable(false)
.Value(Model)
)
}
else
{
@(Html.Kendo().DatePickerFor(m => m)
.Format(values["Format"].ToString())
.HtmlAttributes(new { @class = values["Class"] + " date" })
.Value(Model)
)
}
字符串的编辑器模板:
@model string
@{
var values = ViewData.ModelMetadata.AdditionalValues;
var name = ViewData.ModelMetadata.PropertyName;
}
@if (values["Class"].ToString().Equals("blue-field"))
{
@(Html.Kendo().TextBoxFor(m => m)
.HtmlAttributes(new { @class = values["Class"].ToString() + " helper", @maxlength = values["MaxLength"].ToString() })
.Enable(false)
.Value(Model)
)
}
else
{
@(Html.Kendo().TextBoxFor(m => m)
.HtmlAttributes(new { @class = values["Class"].ToString() + " helper", @maxlength = values["MaxLength"].ToString() })
)
}
答案 0 :(得分:0)
所以在摆弄了一下之后,我想出了一个解决方案。
由于覆盖功能打破了其他所有内容,并且网站的文化是问题的根源,因此我创建了自己的自定义文化,并强制服务器和客户端使用该文化。
我使用了剑道提供的en-ZA文化,并根据我的要求编辑了日期格式。
在我的_Layout.cshtml中,我添加了以下内容:
<script>
$(document).ready(function () {
kendo.culture("en-ZA"); //culture of your choice
$.validator.addMethod('date',
function (value, element) {
return this.optional(element) || kendo.parseDate(value)
});
});
</script>
我将此行添加到我的web.config:
<globalization uiCulture="en-ZA" culture="en-ZA" enableClientBasedCulture="true" ></globalization>
最后,我根据给出的示例添加了Kendo的默认验证器。
这解决了这个问题,并且作为额外的好处,对DateTime字段的绑定没有中断。 (我看到2016年2月1日(dd.MM.yyyy)的约会时间为2016年1月2日)
不幸的是,我仍然不知道为什么会发生这个错误,但这似乎解决了它。