具有全局数字格式的ASP.NET MVC模型绑定器
当我的应用程序在使用不同数字格式的小数(例如1.2 = 1,2)的国家/地区使用时,默认模型绑定器将返回类型为double的属性的错误。网站的文化是在我的BaseController中有条件地设置的。
我已经尝试添加自定义模型绑定器并覆盖bindModel函数但我无法看到如何解决错误,因为Culture已经设置回默认的en-GB。
所以我尝试在我的BaseController中添加一个动作过滤器来设置Culture,但不幸的是bindModel似乎在我的动作过滤器之前被触发了。
我怎么能绕过这个?要么让文化不重置自己,要么在bindModel启动之前将其设置回来?
模型进入无效的控制器:
public ActionResult Save(MyModel myModel)
{
if (ModelState.IsValid)
{
// Save my model
}
else
{
// Raise error
}
}
筛选文化设置:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
CultureInfo culture = createCulture(filterContext);
if (culture != null)
{
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
base.OnActionExecuting(filterContext);
}
自定义模型粘合剂:
public class InternationalDoubleModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (valueResult != null)
{
if (bindingContext.ModelType == typeof(double) || bindingContext.ModelType == typeof(Nullable<double>))
{
double doubleAttempt;
doubleAttempt = Convert.ToDouble(valueResult.AttemptedValue);
return doubleAttempt;
}
}
return null;
}
}
没有找到相关结果
已邀请:
2 个回复
舜辉
然后你可以忘记那些自定义模型绑定器并使用默认值。 更新:好的,这是一个多语言应用程序。你如何获得你想要的文化?你能在MvcApplication类上调用createCulture吗?你可以这样做:
在模型绑定之前调用此方法,因此,您不需要自定义模型绑定器。我希望这个对你有用 :)
坝硷操
......或者,如果你有一个模型:
本文有完整的参考资料和其他方法。我使用这两个,到目前为止我们已经足够了。