Desidero creare un sito Web in diverse lingue. Ho già letto che avrei potuto creare un ActionFilter, ma ho un problema in piu ':
ho dovuto creare un ModelBinder personalizzato al fine di lavorare con i formati di numeri inglese e tedesco (123,456,789.1
vs. 123.456.789,1
)Cambia cultura prima di utilizzare 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);
}
}
Questo ModelBinder utilizza la cultura corrente per decidere quale formato viene utilizzato. Ma sfortunatamente, ModelBinder viene usato prima che ActionFilter possa cambiare la cultura.
Come modificare la cultura prima del il modelloBinder diventa attivo?
E 'di lavoro, grazie un sacco! Ma ho una domanda: lo sai, perché il codice viene eseguito 5 volte per richiesta? – Christopher
Non sto ottenendo questo comportamento. Puoi aggiungere un orologio a ((System.Web.HttpApplication) (mittente)). Request.RawUrl e vedere se le richieste sono le stesse? – barry
@Christopher Il codice viene eseguito una volta per richiesta (da cui il nome BeginRequest), quindi forse c'è una richiesta per la pagina e altre 4 per fogli di stile, immagini o file JavaScript. Controlla Request.Url, che potrebbe far luce. –