ユーザーが「,」「.」を入力できるように、モデル バインディング機能を作成したいと考えています。私のViewModelの二重値にバインドする通貨値など。
カスタム モデル バインダーを作成することで MVC 1.0 でこれを行うことができましたが、MVC 2.0 にアップグレードしてから、この機能は機能しなくなりました。
この機能を実行するためのアイデアやより良い解決策はありますか? より良い解決策は、データ注釈またはカスタム属性を使用することです。
public class MyViewModel
{
public double MyCurrencyValue { get; set; }
}
好ましい解決策は次のようなものです...
public class MyViewModel
{
[CurrencyAttribute]
public double MyCurrencyValue { get; set; }
}
以下は、MVC 1.0 でのモデル バインディングの私のソリューションです。
public class MyCustomModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
object result = null;
ValueProviderResult valueResult;
bindingContext.ValueProvider.TryGetValue(bindingContext.ModelName, out valueResult);
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueResult);
if (bindingContext.ModelType == typeof(double))
{
string modelName = bindingContext.ModelName;
string attemptedValue = bindingContext.ValueProvider[modelName].AttemptedValue;
string wantedSeperator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
string alternateSeperator = (wantedSeperator == "," ? "." : ",");
try
{
result = double.Parse(attemptedValue, NumberStyles.Any);
}
catch (FormatException e)
{
bindingContext.ModelState.AddModelError(modelName, e);
}
}
else
{
result = base.BindModel(controllerContext, bindingContext);
}
return result;
}
}