You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:41:13