2013-10-11 64 views
1

我在窗體中有一個簡單的NumericTextBox。錯誤的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)

回答

1

我和Kendo UI和十進制值有類似的問題。事實證明,由於線程Culture,服務器端使用逗號作爲小數點分隔符來呈現文本框中的初始值,而Kendo期待將句號作爲小數點分隔符。

確保Kendo文化和服務器端的CurrentCulture都是同步的。

這是我所做的解決我所遇到的問題。

在我的MVC應用程序的頁面佈局,其中包括我的劍道腳本行後,我包括這個片段:

<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.com/getting-started/using-kendo-with/aspnet-mvc/globalization