5

NerdDinnerサンプルアプリケーションを使用していて、Virtual Earth マップを扱うセクションにたどり着きました。アプリケーションは、経度と緯度の値を保存します。残念ながら、私のシステムでは、浮動小数点数は、米国のようなドットではなく、カンマを小数点として格納されています。したがって、緯度が 47.64 の場合、取得されて 47,64 として表示されます。その値は Virtual Earth API への関数呼び出しで渡されるため、その時点で失敗します (たとえば、JavaScript API は47.64, -122.13を想定していますが、 47,64, -122,13を取得します)。

アプリケーションが常にドットを使用していることを確認する必要があります。WebForms アプリでは、メソッドをオーバーライドする共通クラスがありSystem.Web.UI.Page.InitializeCulture()、そのクラスからページを継承します。

MVCで同じことをする方法がわかりません。カスタマイズが必要ViewPageですか?これを解決する簡単な方法はありますか?例?

4

5 に答える 5

2

en-US に設定<globalization/>してもまったく役に立たなかったので、適切なカルチャ設定を初期化するカスタム クラスを作成し、この動作を必要とするすべてのビューがカスタム クラスから継承されるようにすることにしました。

NerdDinnerViewPage.cs:

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

namespace NerdDinner.Views
{
    public class NerdDinnerViewPage<T> : ViewPage<T> where T : class
    {
        protected override void InitializeCulture()
        {
            base.InitializeCulture();

            Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentCulture.Clone() as CultureInfo;

            if (Thread.CurrentThread.CurrentCulture != null)
            {
                Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator = ".";
                Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";
            }
        }
    }
}

編集.aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="NerdDinner.Views.NerdDinnerViewPage<NerdDinner.Models.DinnerFormViewModel>" %>
于 2009-04-27T12:24:48.983 に答える
2

私はデンマークの開発者で、まったく同じ問題に直面していました。Kristof Neirynck が彼の開発ブログで親切に説明している実用的なソリューションを見つけました。

カスタムモデルバインダー

敬具、 フィン・ヴィルスベック

于 2009-08-15T10:45:59.507 に答える
0

TemplateEditor で簡単なクイックフィックスを使用しています。私のアプリケーションはスウェーデン語 (小数点記号としてコンマ) のみを使用しているため、単一の string.Replace ですが、もちろん複数のカルチャを認識させることもできます。

私のビュー/共有/EditorTemplates/Decimal.ascx:

于 2010-05-24T10:25:14.793 に答える
0

代わりに JavaScript 側でこれを修正し、map-library に渡されるものはポイント (.) を使用し、テキスト ボックスに戻されるものはコンマ (,) を使用するようにしました。明らかに、これはローカライズ用ではなく、簡単な修正です。

callbackForLocation のMap.js :

//If we've found exactly one place, that's our address.
if (points.length === 1) {
    $("#Latitude").val(points[0].Latitude.toString().replace('.', ','));
    $("#Longitude").val(points[0].Longitude.toString().replace('.', ','));
}

jquery-ready() のMap.ascx :

    var latitude = <%=Model.Latitude.ToString().Replace(',', '.')%>;
    var longitude = <%=Model.Longitude.ToString().Replace(',', '.')%>;
于 2010-11-23T12:50:49.257 に答える