加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在使用ModelBinder之前更改文化

发布时间:2020-12-16 00:15:25 所属栏目:asp.Net 来源:网络整理
导读:我想用不同的语言创建一个网站.我已经读过我可以创建一个 ActionFilter,但我有一个小问题: 我必须创建一个自定义的ModelBinder才能使用英语和德语数字格式(123,456,789.1与123.456.789,1) public class DecimalModelBinder : DefaultModelBinder{ public ov
我想用不同的语言创建一个网站.我已经读过我可以创建一个 ActionFilter,但我有一个小问题:
我必须创建一个自定义的ModelBinder才能使用英语和德语数字格式(123,456,789.1与123.456.789,1)
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);

    }
}

此ModelBinder使用当前文化来决定使用哪种格式.
但不幸的是,在ActionFilter改变文化之前就使用了ModelBinder.

如何在ModelBinder变为活动状态之前更改文化?

解决方法

您可以实现IHttpModule并在BeginRequest中设置文化,如 here所示.
void context_BeginRequest(object sender,EventArgs e)
{
    // eat the cookie (if any) and set the culture
    if (HttpContext.Current.Request.Cookies["lang"] != null)
    {
        HttpCookie cookie = HttpContext.Current.Request.Cookies["lang"];
        string lang = cookie.Value;
        var culture = new System.Globalization.CultureInfo(lang);
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读