グローバリゼーションを使用して小数フィールドを検証するのに苦労しています。
値をフランス語形式にする必要があります(小数点記号としてカンマを使用し、千区切り記号は使用しません)。
編集:この素晴らしいソリューションに従って更新
だから、ここに私のモデルがあります:
public class CompanyTaxHistoryModel
{
[Required]
public DateTime DateFrom { get; set; }
[Required]
public DateTime DateTo { get; set; }
[Required]
[Range(0, 100, ErrorMessage = "The percentage must be between 0 and 100")]
[DisplayFormat(DataFormatString = "{0:N} %")]
[Display(Name = "Company Tax")]
public decimal CompanyTaxPercent { get; set; }
}
ここに私の web.config があります:
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" culture="auto" uiCulture="auto" /
>
次のように「localizationHelper」を追加しました。
namespace xxxx.Helpers
{
public static class LocalizationHelpers
{
public static IHtmlString MetaAcceptLanguage<t>(this HtmlHelper<t> html)
{
var acceptLanguage = HttpUtility.HtmlAttributeEncode(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString());
return new HtmlString(String.Format("<meta name=\"accept-language\" content=\" {0}\">",acceptLanguage));
}
}
}
_Layout.cshtml で使用するもの:
@using xxxx.Helpers
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
@Html.MetaAcceptLanguage()
Globalize.js + 必要なカルチャをプロジェクトに追加し、以下をスクリプトに追加しました。
$(document).ready(function () {
var data = $("meta[name='accept-language']").attr("content")
Globalize.culture(data);
});
$.validator.methods.date = function (value, element) {
return Globalize.parseDate(value);
};
$.validator.methods.range = function (value, element, param) {
return this.optional(element) || (Globalize.parseFloat(value) >= param[0] && Globalize.parseFloat(value) <= param[1]);
}
$.validator.methods.number = function (value, element) {
return !isNaN(Globalize.parseFloat(value));
}
すべてが正常に機能しているように見えますが、「。」としての小数値に問題があります。任意のキーボードのボタンは、適切な値 (ローカル カルチャに応じて "." または "," のいずれか) をレンダリングする必要があります。
たとえば、私のブラウザは fr-FR に設定されており、数字パッドのみを使用して「12,5」と入力すると、「12.5」と表示されるため、検証エラーが発生します。
その場合は「.」テンキーのボタンはコマとして理解されるものとします。
何かアイデア、何が欠けていますか?