c# – 在asp.net-mvc中使用Modelbinding double的CultureInfo问题(2)

c# – 在asp.net-mvc中使用Modelbinding double的CultureInfo问题(2),第1张

概述在我的 Jquery脚本中,我使用浏览器的CultureInfo(en-UK)发布两个双打,它使用.as分数分隔符.我的MVC应用程序在具有区域设置nl-BE的服务器上运行,使用,作为分数分隔符. [AcceptVerbs(HttpVerbs.Post)]public JsonResult GetGridCell(double longitude, double latitude){ 在我的 Jquery脚本中,我使用浏览器的CultureInfo(en-UK)发布两个双打,它使用.as分数分隔符.我的MVC应用程序在具有区域设置nl-BE的服务器上运行,使用,作为分数分隔符.
[AcceptVerbs(httpVerbs.Post)]public JsonResult GetGrIDCell(double longitude,double latitude){    var cell = new GrIDCellviewmodel { X = (int)Math.Round(longitude,0),Y = (int)Math.Round(latitude,0) };    return Json(cell);}

由于解析问题,模型绑定失败.

我认为最好将我的JavaScript设置为en-UK,并将其与我的MVC应用中的模型绑定相同.但我不知道该怎么做.
有什么建议?

解决方法 我不确定本地化与默认模型绑定器(DefaultModelBinder)的距离有多远,但您可以自己轻松创建一个可以处理特定于文化的数据解析的绑定器,例如,创建一个新类,让我们称之为DoubleModelBinder,copypasta以下内容:
public class DoubleModelBinder : IModelBinder{    /// <summary>    /// Binds the value to the model.    /// </summary>    /// <param name="controllerContext">The current controller context.</param>    /// <param name="bindingContext">The binding context.</param>    /// <returns>The new model.</returns>    public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)    {        var culture = GetUserCulture(controllerContext);        string value = bindingContext.ValueProvIDer                           .GetValue(bindingContext.Modelname)                           .ConvertTo(typeof(string)) as string;        double result = 0;        double.TryParse(value,NumberStyles.Any,culture,out result);        return result;    }    /// <summary>    /// Gets the culture used for formatting,based on the user's input language.    /// </summary>    /// <param name="context">The controller context.</param>    /// <returns>An instance of <see cref="CultureInfo" />.</returns>    public CultureInfo GetUserCulture(ControllerContext context)    {        var request = context.httpContext.Request;        if (request.UserLanguages == null || request.UserLanguages.Length == 0)            return CultureInfo.CurrentUICulture;        return new CultureInfo(request.UserLanguages[0]);    }}

现在,我们在这里做的是建立我们自己的语言感知双解析器.当我们实现IModelBinder接口时,我们需要创建一个BindModel方法.这就是它的核心所在,但在我们解析任何东西之前,我们需要根据浏览器的语言获得IFormatProvIDer.因此,我们使用GetUserCulture方法尝试并准备好浏览器的语言.如果我们不能回归当前的文化.

当我们拥有它时,我们就能够解析价值.我们首先从ValueProvIDer中获取它(它实际上是许多值提供者的组合,例如来自Form集合,Request集合等),然后我们使用发现的IFormatProvIDer解析它,这是我们现在拥有的CultureInfo.

一旦你完成了它,将它添加到模型绑定器集合中是非常简单的;

ModelBinder.Binders[typeof(Double)] = new DoubleModelBinder();

试试看,看看是否有帮助.

总结

以上是内存溢出为你收集整理的c# – 在asp.net-mvc中使用Modelbinding double的CultureInfo问题(2)全部内容,希望文章能够帮你解决c# – 在asp.net-mvc中使用Modelbinding double的CultureInfo问题(2)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1250956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存