8

私のプロジェクトでは、ユーザーが「,」または「.」を使用して、2 つの形式で double 値を入力できるようにしたいと考えています。区切り記号として(指数形式には興味がありません)。区切り文字「.」を使用したデフォルト値 働かないでください。この動作が複雑なモデル オブジェクトのすべての double プロパティで機能することを望みます (現在、識別子と値を含むオブジェクトのコレクションを使用しています)。

何を使用する必要がありますか: 値プロバイダーまたはモデル バインダー? 私の問題を解決するコード例を示してください。

4

1 に答える 1

20

カスタム モデル バインダーを使用できます。

public class DoubleModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (result != null && !string.IsNullOrEmpty(result.AttemptedValue))
        {
            if (bindingContext.ModelType == typeof(double))
            {
                double temp;
                var attempted = result.AttemptedValue.Replace(",", ".");
                if (double.TryParse(
                    attempted,
                    NumberStyles.Number,
                    CultureInfo.InvariantCulture,
                    out temp)
                )
                {
                    return temp;
                }
            }
        }
        return base.BindModel(controllerContext, bindingContext);
    }
}

に登録できますApplication_Start

ModelBinders.Binders.Add(typeof(double), new DoubleModelBinder());
于 2011-06-30T06:12:55.407 に答える