Chcę utworzyć witrynę internetową w różnych językach. Już odczytać, że mogę stworzyć ActionFilter, ale mam Litte problem:
musiałem utworzyć niestandardową ModelBinder w celu pracy z angielskim i niemieckim formatów numerycznych (123,456,789.1
vs. 123.456.789,1
)Zmień kulturę przed skorzystaniem z aplikacji ModelBinder.
public class DecimalModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string key = bindingContext.ModelName;
var v = ((string[])bindingContext.ValueProvider.GetValue(key).RawValue)[0];
float outPut;
if (float.TryParse(v, NumberStyles.Number, System.Globalization.CultureInfo.CurrentCulture, out outPut))
return outPut;
return base.BindModel(controllerContext, bindingContext);
}
}
ten ModelBinder używa aktualnej kultury, aby zdecydować, który format jest używany. Niestety aplikacja ModelBinder jest używana, zanim ActionFilter może zmienić kulturę.
Jak zmienić kulturę przed modelBinder staje się aktywny?
To działa, dziękuję bardzo! Ale mam jedno pytanie: czy wiesz, dlaczego kod jest wykonywany 5 razy na żądanie? – Christopher
Nie dostaję tego zachowania. Czy możesz dodać zegarek do ((System.Web.HttpApplication) (nadawca)). Request.RawUrl i sprawdzić, czy żądania są takie same? – barry
@Christopher Kod jest wykonywany raz na żądanie (stąd nazwa BeginRequest), więc być może istnieje jedno żądanie strony, a kolejne 4 dla arkuszy stylów, obrazów lub plików JavaScript. Sprawdź Request.Url, który może rzucić trochę światła. –