gpt4 book ai didi

asp.net-mvc - 具有全局数字格式的 ASP.NET MVC 模型绑定(bind)器

转载 作者:行者123 更新时间:2023-12-02 07:32:32 24 4
gpt4 key购买 nike

当我的应用程序在使用不同小数数字格式(例如 1.2 = 1,2)的国家/地区使用时,默认模型绑定(bind)器会返回 double 类型的属性错误。网站的文化是在我的 BaseController 中有条件地设置的。

我尝试添加自定义模型绑定(bind)器并覆盖 bindModel 函数,但我不知道如何解决其中的错误,因为文化已被设置回默认的 en-GB。

因此,我尝试向我的 BaseController 添加一个操作过滤器,以在那里设置文化,但不幸的是,bindModel 似乎在我的操作过滤器之前被触发。

我该如何解决这个问题?要么让文化不重置自身,要么在bindModel启动之前将其设置回来?

模型无效的 Controller :

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);
}

自定义模型绑定(bind)器:

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;
}
}

最佳答案

您希望您的应用程序使用单一区域性,对吧?如果是这样,您可以使用 web.config 的全局化标记来执行此操作。

<configuration>
<system.web>
<globalization
enableClientBasedCulture="true"
culture="en-GB"
uiCulture="en-GB"/>
</system.web>
</configuration>

然后您可以忘记那些自定义模型绑定(bind)程序并使用默认值。

更新:好的,这是一个多语言应用程序。如何获得你想要的文化?您可以在 MvcApplication 类上调用 createCulture 吗?你可以这样做:

public class MvcApplication : HttpApplication
{
//...
public void Application_OnBeginRequest(object sender, EventArgs e)
{
CultureInfo culture = GetCulture();
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
//...
}

此方法在模型绑定(bind)之前调用,因此,您不需要自定义模型绑定(bind)程序。我希望它对你有用:)

关于asp.net-mvc - 具有全局数字格式的 ASP.NET MVC 模型绑定(bind)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5050641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com