Kendo MVC UI Scheduler自定义编辑器模板ComboBox验证移除问题
移除Kendo MVC UI Scheduler自定义编辑器中ComboBox的数值验证问题
我在Kendo MVC UI Scheduler的自定义编辑器模板中尝试移除ComboBox的验证,模板代码如下:
... @{ ViewContext.FormContext = new FormContext(); } <div data-container-for="ClientId" class="k-edit-field"> @(Html.Kendo().ComboBoxFor(model => model.ClientId) .HtmlAttributes(new { data_bind = "value:ClientId", id = "ClientId", data_val = false }) .Name("ClientId") .DataTextField("Text") .DataValueField("Value") .DataSource(source => { source.Read(read => { read.Action("GetClientsList", "Scheduler"); }).ServerFiltering(true); }) .Events(e => { e.Select("onSelect"); }) .HtmlAttributes(new { style = "width:100%;" })) </div> @{ ViewContext.FormContext = null; } ...
已尝试在模型中自定义验证属性来取消验证:
[AllowAnyValue] public int? ClientId { get; set; } public class AllowAnyValueAttribute : ValidationAttribute { public override bool IsValid(object value) { // Always return true to allow any value return true; } }
但在ComboBox中输入文本(如客户名称)时,仍会收到Kendo的错误提示:The field ClientId must be a number.(即“字段ClientId必须是数字”)
解决方法
这个错误是Kendo的客户端数值验证触发的,和服务器端验证无关,可通过以下方式处理:
明确禁用客户端数值验证属性
在ComboBox的HtmlAttributes中添加data_val_number = "false",覆盖默认生成的数值验证规则,修改后的ComboBox代码如下:@(Html.Kendo().ComboBoxFor(model => model.ClientId) .HtmlAttributes(new { data_bind = "value:ClientId", id = "ClientId", data_val = "false", data_val_number = "false" // 禁用数值验证 }) .Name("ClientId") .DataTextField("Text") .DataValueField("Value") .DataSource(source => { source.Read(read => { read.Action("GetClientsList", "Scheduler"); }) .ServerFiltering(true); }) .Events(e => e.Select("onSelect")) .HtmlAttributes(new { style = "width:100%;" }))手动移除客户端验证规则
如果上述方法无效,可在页面初始化后,通过JS手动移除该字段的验证规则:$(function() { // 获取编辑器表单的Kendo验证实例 var validator = $(".k-edit-form").kendoValidator().data("kendoValidator"); // 移除数值验证规则 if (validator.options.rules.number) { delete validator.options.rules.number; } // 清空该字段的错误提示信息 validator.options.messages.ClientId = ""; });修改模型字段类型(可选)
若业务逻辑允许,可将ClientId的类型从int?改为string,这样默认不会生成数值验证规则,后续在后台处理时再将字符串转换为int类型即可。
内容的提问来源于stack exchange,提问作者hncl
相关产品推荐
相关产品推荐

