asp.net MVC 1.0 и 2.0 валютная модель привязки
Я хотел бы создать функциональность привязки модели, чтобы пользователь мог вводить ',' '.' и т.д. для валютных значений, которые привязываются к двойному значению моей 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;
}
}