如何手动设置Kendo UI NumericTextBox显示模型指定货币而非文化货币?
如何让Kendo UI NumericTextBox显示模型指定的货币符号而非网站文化默认符号
我完全懂你碰到的这个坑——Kendo UI的NumericTextBox默认会优先采用当前网站文化的货币配置,哪怕你在Format()里明确写了自定义的货币符号,它也会偷偷给你替换成文化对应的符号,比如切换到德语文化就显示欧元,这就导致你明明在代码里设了"$ #.00",实际渲染出来却不是美元符号。
问题根源
Kendo的NumericTextBox在处理格式字符串时,如果识别到货币相关的格式标记(比如$),会自动匹配当前kendo文化对象里numberFormat.currency.symbol的值,用这个值替换你格式字符串里的符号。所以哪怕你硬写了$,只要当前文化的货币符号是€,最终显示的还是欧元。
两种可行的解决方案
方案1:修改当前Kendo文化的货币符号(你已验证的有效方法)
通过直接修改当前页面的kendo文化配置,把货币符号替换成你模型指定的内容,这样所有使用货币格式的控件都会同步使用这个自定义符号。代码示例如下:
<script> // 获取当前kendo文化对象 var currCulture = kendo.culture(); // 替换货币符号为模型指定的值 currCulture.numberFormat.currency.symbol = '@Strings.ResourceManager.GetString(Model.Currency.ToString())'; </script> @(Html.Kendo().NumericTextBox<decimal>() .Name("TicketOptions[" + i + "].Price") .Min(memberTicketOptions[i].MinPrice) .Value(memberTicketOptions[i].MinPrice) .Format(Strings.ResourceManager.GetString(Model.Currency.ToString()) + " #.00") .HtmlAttributes(new { style = "width: 104px;" }) )
这个方法的优势是能统一设置整个页面的货币符号,适合所有控件都需要用同一种货币的场景。
方案2:用单引号包裹货币符号,让控件把它当成普通文本
如果你只想让单个控件显示指定的货币符号,不想影响其他控件的文化设置,可以把货币符号用单引号包裹起来,这样Kendo就不会把它识别为货币格式标记,而是直接显示这个文本。代码示例:
@(Html.Kendo().NumericTextBox<decimal>() .Name("amount") .Min(Model.MinPrice) .Value(Model.MinPrice) // 用单引号包裹货币符号,避免被文化配置替换 .Format($"'{Strings.ResourceManager.GetString(Model.Currency.ToString())}' #.00") .HtmlAttributes(new { style = "width: 104px;" }) )
这样生成的页面源码里,格式会是"'$' #.00"(假设模型指定的是美元),控件就会直接显示$符号,不会被文化替换。这个方法更灵活,适合单个控件自定义的场景。
总结
- 如果需要全局统一货币符号,用方案1修改文化配置;
- 如果只是单个控件需要自定义,方案2的单引号包裹方式更合适,不会影响其他控件。
内容的提问来源于stack exchange,提问作者bthn
相关产品推荐
相关产品推荐

