Я хотел бы создать функциональность привязки модели, чтобы пользователь мог ввести ',' '.' и т. д. для значений валюты, которые привязаны к двойному значению моего ViewModel.asp.net MVC 1.0 и 2.0 привязка модели валюты
Я смог сделать это в 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;
}
}
Если вы имеете дело со списком MyViewModel, это изменит ModelBinder для действия? Публичный индекс активности в действии ([ModelBinder (typeof (CurrencyBinder))] IList модель) –
David
См. Мое обновление. –