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

c# – JQuery Asp.Net MVC,传递浮点数

发布时间:2020-12-15 06:39:20 所属栏目:百科 来源:网络整理
导读:我最近和MVC一起工作,在尝试使用ajax向控制器发送请求时遇到了一个奇怪的问题.我正在使用直接与MVC的 JQuery(1.3.2版),我试图发送这样的一个jax请求: $.post("Home/OpenTrade",{ price: 1.5 },function() { },"json"); 我也尝试过parseFloat(“1.5”)而不是
我最近和MVC一起工作,在尝试使用ajax向控制器发送请求时遇到了一个奇怪的问题.我正在使用直接与MVC的 JQuery(1.3.2版),我试图发送这样的一个jax请求:
$.post("Home/OpenTrade",{ price: 1.5 },function() { },"json");

我也尝试过parseFloat(“1.5”)而不是1.5.
当我尝试在控制器中使用这个值

[AcceptVerbs( HttpVerbs.Post)]
public void OpenTrade(float? price)

我的价格总是为零.如果我省略控制器根本没有被调用(这并不奇怪),我已经尝试使用十进制以及double类型.此外,当我发送整数数据(如果我发送1这个控制器被调用,并且float?价格被正确填充),这个功能工作.我错过了什么,还是一个bug?

广告.我可以收到价格作为字符串,然后手动解析,但我不喜欢这个解决方案,因为它不优雅,它打击使用框架像MVC的全部目的为我做这个.

编辑&回答:使用Joel的建议,我创建了一个模型绑定器,我会发布,也许有人会使用它:

class DoubleModelBinder : IModelBinder
{
    #region IModelBinder Members

    public object BindModel(ControllerContext controllerContext,ModelBindingContext    bindingContext)
    {
        string numStr = bindingContext.ValueProvider[bindingContext.ModelName].AttemptedValue;
        double res;

        if (!double.TryParse(numStr,System.Globalization.NumberStyles.Number,System.Globalization.CultureInfo.InvariantCulture,out res))
        {
            if (bindingContext.ModelType == typeof(double?))
                return null;
            throw new ArgumentException();
        }

        if (bindingContext.ModelType == typeof(double?))
            return new Nullable<double>(res);
        else
            return res;
    }

    #endregion
}

它可能注册为双倍和双倍?粘合剂,双重?如果值无法解决,它将传递给控制器??的null.

顺便说一句.为什么浮动和双打的任何想法都不能开箱即用(对我来说)

Edit2&解决方案:好的,这很有趣:)它没有为我工作,因为请求的字符串发送1.5432(一个示例值),这是完全可以,但是… MVC正在尝试使用我的文化设置内部解码,这是期望的数字是格式1,5432,所以转换失败了.
所以,要记住的是:如果你生活在陌生的国家,请仔细检查你的文化环境.

解决方法

做一个浮动模型绑定器.这可以从表单集合中提取适当的值,解析它,并将其作为参数返回

(编辑:李大同)

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

    推荐文章
      热点阅读