ASP.NET MVC中如何动态设置Kendo NumericTextBox格式
动态设置Kendo NumericTextBox数值显示格式方法
原有代码不生效原因
你写的.Format("dynamicValue")是Razor服务端渲染逻辑,执行阶段会直接把字符串"dynamicValue"作为格式值传给控件,根本不会读取客户端JS里定义的dynamicValue变量;且接口返回值是客户端异步请求拿到的,服务端渲染控件时完全拿不到这个值,自然不会生效。
正确实现方案
- Razor端初始化控件时,先配置默认格式即可,不要把JS变量名当字符串传入Format参数
- 客户端GET接口拿到动态格式字符串后,获取NumericTextBox的客户端实例,调用官方提供的
setOptions方法更新格式配置,再刷新控件值让新格式立即生效。
参考代码
Razor初始化部分:
@(Html.Kendo().NumericTextBox<double>() .Name("Amount") .Spinners(false) // 可先配置临时默认格式,接口返回后会被替换 .Format("###,###.000") .Decimals(3) .HtmlAttributes(new { style = "width: 100%; height: 27px;", tabindex = "6" }) .Events(e => e.Change("OnAmountChange")) )
客户端接口请求+动态更新格式部分:
// 发起GET请求获取动态格式配置 $.get("你的格式配置接口地址", function (dynamicFormat) { // 获取NumericTextBox客户端实例 const numInstance = $("#Amount").data("kendoNumericTextBox"); // 动态更新格式、匹配对应小数位数 numInstance.setOptions({ format: dynamicFormat, decimals: dynamicFormat.includes('.') ? dynamicFormat.split('.')[1].length : 0 }); // 触发值刷新,让新格式立即作用到当前显示值 numInstance.value(numInstance.value()); });
注意:如果用fetch替代jQuery的$.get也完全可以,只要拿到接口返回的格式字符串后执行实例更新逻辑即可,支持所有Kendo NumericTextBox兼容的数字格式字符串。
内容的提问来源于stack exchange,提问作者Vivek Nuna
相关产品推荐
相关产品推荐

