Ich möchte Model Binding-Funktionalität erstellen, damit ein Benutzer geben kann "," "." usw. für Währungswerte, die an einen doppelten Wert meines ViewModels binden.asp.net MVC 1.0 und 2.0 Währungsmodell verbindlich
Ich konnte dies in MVC 1.0 durch Erstellen eines benutzerdefinierten Modellbinders tun, aber seit dem Upgrade auf MVC 2.0 funktioniert diese Funktionalität nicht mehr.
Hat jemand Ideen oder bessere Lösungen zum Ausführen dieser Funktionalität? Eine bessere Lösung wäre die Verwendung einer Datenannotation oder eines benutzerdefinierten Attributs.
public class MyViewModel
{
public double MyCurrencyValue { get; set; }
}
Eine bevorzugte Lösung wäre so etwas wie dieses ...
public class MyViewModel
{
[CurrencyAttribute]
public double MyCurrencyValue { get; set; }
}
Im Folgenden finden Modell meine Lösung für 1.0 in MVC binden.
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;
}
}
Wenn Sie mit einer Liste von MyViewModel beschäftigt ist, ändert das den ModelBinder für die Aktion? öffentlicher ActionResult-Index ([ModelBinder (typeof (CurrencyBinder))] IList Modell) –
David
Bitte beachten Sie mein Update. –