2017-07-06 9 views
0

Ich habe einige Daten vom Client zum Server wie dieser hierDezimal Binder Modell nicht mit der Globalisierung arbeiten

$.post(url, myData) 
    .done(function (data) { 
    }); 

Posting ist die Klage der Controller

public class MyModel 
{ 
    decimal Precision { get; set; } 
} 

[HttpPost] 
public ActionResult PostInfo(MyModel postBack) 
{ 
} 

wenn ich die englische Kultur verwenden Postinfo funktioniert wie erwartet, aber wenn ich die Kultur auf Spanisch ändern und Precision = 1,2 dann bekomme ich den folgenden Fehler

Der Wert 1,2 ist für Präzisions nicht gültig

kann mir jemand bitte sagen, warum das Standardmodell Bindemittel 1,2, wenn die Current Spanisch ist zu analysieren versagt?

Ich ändere die Kultur in _Layout.cshtml. Es ist nur für Testzwecke.

@{ 
    System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("es", "ES"); 
} 
+0

"Wenn ich die Kultur auf Spanisch ändere" - können Sie teilen, wo und wie Sie das tun? –

+0

@pep Ich habe die Frage bearbeitet, um zu zeigen, wie ich die Kultur ändere – vcRobe

+0

Ah, das wird nicht funktionieren. Das Rendering der Ansicht erfolgt nach dem Aufruf des Controllers. Unter https://stackoverflow.com/questions/1560796/set-culture-in-an-asp-net-mvc-app finden Sie verschiedene Methoden zum Einstellen der aktuellen Kultur. Ich schlage das https://stackoverflow.com/a/6788690/1558122 vor. –

Antwort

0

das letzte Mal, als ich überprüft habe, behandelt das Standardmodell Binder nicht Internationalisierungsformate. du würdest dich selbst rollen müssen.

public class DecimalModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, 
     ModelBindingContext bindingContext) 
    { 
     var valueResult = bindingContext.ValueProvider 
      .GetValue(bindingContext.ModelName); 
     var modelState = new ModelState { Value = valueResult }; 
     object actualValue = null; 
     try 
     { 
      //Check if this is a nullable decimal and a null or empty string has been passed 
      var isNullableAndNull = (bindingContext.ModelMetadata.IsNullableValueType && 
             string.IsNullOrEmpty(valueResult.AttemptedValue)); 

      //If not nullable and null then we should try and parse the decimal 
      if (!isNullableAndNull) 
      { 
       actualValue = decimal.Parse(valueResult.AttemptedValue, NumberStyles.Any, CultureInfo.CurrentCulture); 
      } 
     } 
     catch (FormatException e) 
     { 
      modelState.Errors.Add(e); 
     } 

     bindingContext.ModelState.Add(bindingContext.ModelName, modelState); 
     return actualValue; 
    } 
} 
+0

nach diesem Blog https://weblogs.asp.net/melvynharbour/mvc-modelbinder-and-localization tut es – vcRobe

+0

Dieser Artikel sagt das genaue Gegenteil und erwähnt nur Daten. Er sagt, dass britische Datumsformate nicht nativ unterstützt werden und gibt sogar ein Beispiel, wie man einen Modellbinder schreibt, um die Situation zu beheben. – Fran

Verwandte Themen