Bir kullanıcı girebilsin diye model bağlama işlevi oluşturmak istiyorum ',' '.' ViewModel'imin çifte değerine bağlanan para birimi değerleri için vb.asp.net MVC 1.0 ve 2.0 para birimi model bağlama
Bunu MVC 1.0'da özel bir model bağlayıcı oluşturarak yapabilirdim, ancak MVC 2.0'a yükselttikten sonra bu işlev artık çalışmıyor.
Bu işlevsellik için herhangi bir fikri veya daha iyi çözümleri olan var mı? Daha iyi bir çözüm, bazı veri açıklamalarını veya özel niteliklerini kullanmak olabilir.
public class MyViewModel
{
public double MyCurrencyValue { get; set; }
}
bir tercih edilen çözüm
public class MyViewModel
{
[CurrencyAttribute]
public double MyCurrencyValue { get; set; }
}
Aşağıda MVC 1.0'da bağlama modeli için benim çözüm ... Böyle bir şey olurdu.
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'in bir listesiyle ilgileniyorsanız, bu eylem için ModelBinder'ı değiştirir mi? public ActionResult Dizini ([ModelBinder (typeof (CurrencyBinder))] IList model) –
David
Lütfen güncellemeye bakın. –