2011-05-21 4 views
6

私は控えめな検証を使用してローカライズされたmvc3 Webアプリケーションを開発中です。 web.configファイルで私が持っている:mvc3 jquery妥協しない検証ロケール10進数フィールド

<globalization culture="pl-PL" uiCulture="pl" /> 

jQueryの1.4.4とjQueryの検証1.6が使用されています。

10進数の区切り文字に問題があります。

jqueryの検証ではカルチャを無視していることがわかりますが、ドット文字は常に小数点の桁区切りになることが予想されます。代わりにコンマを使う必要があります。私はそれが例えばドイツ語で同じだと思う。

は、私は自分のmethods_pl.jsファイルを作成:

jQuery.extend(jQuery.validator.methods, { 
number: function(value, element) { 
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value); 
} 
}); 

以上は小数点数が全く認識されない基本的な問題を解決しています。

しかし、私のモデルのDecimal PriceプロパティでRangeAttributeを使用しようとすると、まだ動作しません。 これを解決するには?

+0

ここに私の答えを見てください。あなたの解決策を見つけるかもしれません! http://stackoverflow.com/questions/9204855/cant-get-the-jquery-globalization-to-work/9221040#9221040 – Rushino

答えて

1

Phil Haackがこの問題についての情報を掲載しました。ポストで

See here.

は、彼がやってdesribes以下:

using System; 
using System.Globalization; 
using System.Web.Mvc; 

public class DecimalModelBinder : IModelBinder { 
    public object BindModel(ControllerContext controllerContext, 
    ModelBindingContext bindingContext) { 
    ValueProviderResult valueResult = bindingContext.ValueProvider 
     .GetValue(bindingContext.ModelName); 
    ModelState modelState = new ModelState { Value = valueResult }; 
    object actualValue = null; 
    try { 
     actualValue = Convert.ToDecimal(valueResult.AttemptedValue, 
      CultureInfo.CurrentCulture); 
    } 
    catch (FormatException e) { 
     modelState.Errors.Add(e); 
    } 

    bindingContext.ModelState.Add(bindingContext.ModelName, modelState); 
    return actualValue; 
    } 
} 

とし、その後のGlobal.asaxで

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder()); 

私は、これは上の問題を解決するかどうかわからないんだけどクライアントも同様です(Phil氏はそれがうまくいくと思われます)が、少なくともサーバー側の問題を解決するはずです。

+0

クライアント側がサーバー側と異なるカルチャを持つ場合は、このコードでも問題があります。 –

+0

私はcultureとuiCultureをweb.configのように設定しました。 - これはサーバー側とクライアント側の両方の文化を正しく設定していますか? – mb666

+0

上記のDecimalModelBinderはうまく動作します。 valueResult.Culture.NativeNameが「不変の言語(不変の国)」である理由を知りませんか?これはおそらく最初の私の問題の原因です。 DefaultModelBinderが自分のpl-PLカルチャを使用していない場合は動作しません。 DefaultModelBinderの正しいカルチャを設定するにはどうすればよいですか? – mb666

4

あなたが動作する前の回答に掲載DecimalModelBinder

key="UnobtrusiveJavaScriptEnabled" value="false" 

を設定していますが、CLIEN側の検証を無効にしている場合。

問題を解決するには、正しいjQueryロケールをインライン化する必要があります。 this post from Scott Hanselmannまたはthis postのように見てください。

あなたは数が正しく検証持っていることのようなものを追加するには、DOMready機能で、その後Jquery.globalizeプラグインフォームNuGetを追加する必要が

$.validator.methods.number = function (value, element) { 
     if (Globalize.parseFloat(value)) 
      return true; 
     return false; 
    } 
Globalize.culture('fr-FR'); 

、その後に相対的なスクリプトを追加(少なくともそれが私の作品)あなたのページ

<script src="@Url.Content("~/Scripts/jquery-1.7.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.globalize/globalize.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.globalize/cultures/globalize.culture.fr-FR.js")" type="text/javascript"></script> 
関連する問題