5

asp.net mvc2アプリケーションでグローバリゼーションを試していますが、完全に機能させることができません。ライブラリhttp://github.com/nje/jquery-globを、ユーザーの希望に応じて通貨や日付などを表示するツールとして使用しています。しかし、何かが私を少し悩ませています。IUは、jQueryを使用したグローバリゼーションを実際に受け入れるためのクライアント/サーバー側の検証を取得できません。40.00をポストバックしても問題なく動作しますが、40,00をポストすると、0として受け入れられます(有効な.NET不変の10進値ではありません)。@haackedガイドに従ってみました

これは、サーバー側の処理のためにglobal.asaxにあります。

private void SetCulture(string currencySymbol)
{
    AjaxHelper.GlobalizationScriptPath = 
        http://ajax.microsoft.com/ajax/4.0/1/globalization/";

    var culturePref = "sv-SE";
    var request = HttpContext.Current.Request;

    if (request.UserLanguages == null)
        return;

    var lang = request.UserLanguages[0];
    if (lang != null) {
        try {
            Thread.CurrentThread.CurrentCulture =
                CultureInfo.CreateSpecificCulture(lang);
        }
        catch {
            Thread.CurrentThread.CurrentCulture = 
                new CultureInfo(culturePref);
        }
    }

    Thread.CurrentThread.CurrentUICulture = 
        Thread.CurrentThread.CurrentCulture;
}

次に、クライアント側で次のスクリプトを含めました。

<script src="/Scripts/jquery-1.4.2.js" type="text/javascript"></script>
<script src="/Scripts/jquery.glob.js" type="text/javascript"></script>
<script src="/Scripts/globinfo/jquery.glob.sv-SE.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $.culture = jQuery.cultures['sv-SE'];
        $.preferCulture('sv-SE');
    });
</script>
<script src="/Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.pack.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>
<script src="/Scripts/jquery.metadata.js" type="text/javascript"></script>

これまでのところ良いですが、あまり効果がありません。誤解しないでください。クライアントで使用することはできますが、サーバー側では実際には何も起こりません。以下のjQueryはそれに応じてフォーマットを変更しますが、40,00をポストバックすると0.00になります。

function globalizePage(culture) {
    // Set culture from select list
    $.preferCulture(culture);

    $("input[id$='Date']").val(function () {
        var dateString = $(this).val();
        var date = Date.parse(dateString);
        var dt = $.format(date, 'd', culture.name);
        return dt;
    });

    $("input[id$='Price']").val(function () {
        var price = $.parseInt($(this).val());
        var retVal = $.format(price, 'c', culture.name);
        return retVal;
    });
}

上記のコードを機能させるには何をする必要がありますか?

4

1 に答える 1

3

問題が解決し、ベーコンが保存されるか、チキンフライドになりました。これが発生する理由は、jquery.validateとjquery.globが「format」と呼ばれる関数を使用するためです。globの後にvalidateが追加されると、validate.format関数が呼び出され、グローバリゼーションが中断されます。一方、関数を検証します。回避策を説明するのに十分なjavascriptまたはjqueryを知りません。フォームの検証を手動でコーディングし、MicrosoftMVCjQueryValidationを忘れます。これは、プラグインの検証を正しく行わないためです。

<script src="https://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="https://ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.glob.js" type="text/javascript"></script>
<script src="/Scripts/globinfo/jquery.glob.sv-SE.js" type="text/javascript"></script>
<script src="/Scripts/jquery.forms.js" type="text/javascript"></script>
于 2010-08-25T17:07:30.830 に答える