You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何阻止Kendo UI NumericTextBoxFor对小数自动向上取整?

解决Kendo UI NumericTextBoxFor小数向上取整的问题

看起来你遇到的核心问题是前端输入小数(比如0.5)后,后端保存时被自动向上取整为整数。咱们一步步排查可能的原因和解决办法:

1. 优先检查后端模型属性类型

这是最容易踩的坑!如果你的ScheduleViewModel.TimeRemaining属性是int类型,不管前端传什么小数,后端都会自动截断/取整为整数。你需要把它改成decimal或者double类型:

// 模型示例
public class ScheduleViewModel
{
    // 把int改成decimal或double,支持小数存储
    public decimal TimeRemaining { get; set; }
}

2. 修正Kendo NumericTextBox的配置

你已经加了.Decimals(5),但可能缺少Step配置——如果Step默认是1,控件会强制用户输入整数步长,导致小数输入后被自动修正。补充完整配置:

<div class="form-group">
    <div class="col-md-2">
        @Html.LabelFor(model => model.ScheduleViewModel.TimeRemaining, new { @class = "control-label" })
        <span class="glyphicon glyphicon-asterisk mandatoryred" aria-hidden="true"></span>
    </div>
    <div class="col-md-7">
        @Html.Kendo().NumericTextBoxFor(model => model.ScheduleViewModel.TimeRemaining)
            .Decimals(5)
            .Step(0.1) // 允许小数步长,支持0.5这类半值输入
            .Format("n5") // 确保前端显示正确的小数格式
            .Min(0) // 可选:设置最小值,避免输入负数
        <div>
            @Html.ValidationMessageFor(model => model.ScheduleViewModel.TimeRemaining, "", new { @class = "text-danger" })
        </div>
    </div>
</div>

3. 清理无效的前端JS配置

你写的JS代码是针对#initial元素的,但你的目标控件ID应该是ScheduleViewModel_TimeRemaining(Razor嵌套模型生成的ID规则),所以这段JS根本没作用到目标控件。要么删除这段无关的JS,要么修改成针对正确的ID:

$(document).ready(function() {
    // 针对正确的控件ID配置
    $("#ScheduleViewModel_TimeRemaining").kendoNumericTextBox({
        format: "n5",
        decimals: 5,
        step: 0.1
    });
});

不过更推荐直接通过Razor语法配置控件,避免前后端配置冲突。

4. 检查后端绑定与验证规则

  • 有没有自定义模型绑定器强制把值转成整数?检查你的模型绑定逻辑。
  • 有没有数据注解限制了整数范围?比如[Range(1, int.MaxValue)],如果有的话改成支持小数的范围:
    [Range(0.1, double.MaxValue, ErrorMessage = "请输入有效的时间值")]
    public decimal TimeRemaining { get; set; }
    

5. 用浏览器工具验证提交数据

打开浏览器开发者工具(F12),切换到Network标签,提交表单后查看请求参数:

  • 如果TimeRemaining的值是0.5,说明前端没问题,问题出在后端的接收/保存逻辑。
  • 如果值是1,说明前端控件还是在自动修正数值,回到步骤2检查配置。

内容的提问来源于stack exchange,提问作者James Palmer

火山引擎 最新活动