1

我在表单中有一个简单的 NumericTextBox。

问题是我的值总是乘以 100。所以如果我从 8.5 开始,它将显示 850(并保存 850),下次显示 85000,等等。

此外,如果我尝试输入小数 (8.5),它会失败。这个值是正确的:

$("#TimeEstimate").data("kendoNumericTextBox").value()

我怎样才能解决这个问题?

<%= Html.Kendo().NumericTextBox<decimal>()
    .Name("TimeEstimate")
    .Decimals(2)
    .Format("d2")
%>

发送到控制器:

$.ajax({
    type: "POST",
    url: "/Admin/doModify",
    data: $('#myForm').serialize(),
    dataType: "text",
    success: function (data) {},
    error: function (err) {}
});

谢谢

笔记

如果我这样设置值.Value(Model.TimeEstimate/100),它将显示 85 而不是 8.5(8 显示为 8)

4

1 回答 1

1

我对 Kendo UI 和十进制值也有类似的问题。事实证明,由于线程文化,服务器端在文本框中使用逗号作为小数分隔符呈现初始值,而 Kendo 期望使用句点作为小数分隔符。

确保服务器端的剑道文化和 CurrentCulture 是同步的。

这就是我为解决我遇到的问题所做的。

在我的 MVC 应用程序的布局页面上,在我包含 Kendo 脚本的那一行之后,我包含了这个片段:

<script>
  kendo.culture("es-DO");
</script>

在应用程序的 Global.asax.cs 文件中,我包含了在对应用程序的每个请求时都会执行的这个方法:

protected void Application_BeginRequest(object sender, EventArgs e) {
  var culture = new CultureInfo("es-DO", false);
  Thread.CurrentThread.CurrentCulture = culture;
  Thread.CurrentThread.CurrentUICulture = culture;
}

编辑:有几种方法可以设置应用程序的文化和 UI 文化:http: //msdn.microsoft.com/en-us/library/bz9tc508.aspx。此外,从 .NET Framework 4.5 开始,您可以在初始化时设置 DefaultThreadCurrentCulture 和 DefaultThreadCurrentUICulture。

这样做将确保 Kendo UI 框架和服务器对千位和小数使用相同的分隔符。

现在,如果您的应用程序只需要单一文化,此解决方案就可以工作。任何人都可以随意编辑此答案以添加多元文化解决方案。

编辑: Telerik 自己有在服务器端和客户端使用相同文化的指南:http ://docs.kendoui.c​​om/getting-started/using-kendo-with/aspnet-mvc/globalization

于 2013-12-19T14:27:31.413 回答