JQuery + Asp.Net MVC,传递浮点数

我最近和MVC一起工作,在尝试使用ajax向我的控制器发送请求时遇到了一个奇怪的问题。 我正在使用直接来自MVC的JQuery(版本1.3.2),我正在尝试发送这样的ajax请求:

$.post("Home/OpenTrade", { price: 1.5 }, function() { }, "json"); 

我也尝试过parseFloat("1.5")而不是1.5
当我尝试在控制器中使用时接收此值

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

我的价格总是空的。 如果我省略? 根本没有调用控制器(这并不奇怪),我尝试过使用decimaldouble类型。 此外,当我发送整数数据时,此function有效(如果我发送1此控制器被调用,并且float? price被正确填充)。 我错过了什么,还是一个错误?

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

编辑和答案:使用Joel的建议,我创建了一个Model Binder,我将发布,也许有人会使用它:

 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(res); else return res; } #endregion } 

它可能被注册为double和double? 粘合剂,双倍? 如果无法解析值,它会将null传递给控制器​​。

顺便说一句。 浮雕和双打的任何想法都没有开箱即用(对我而言?)?

Edit2&Solution:好的,这会很有趣:)。 它对我不起作用,因为请求的字符串发送1.5432 (一个示例值),这是完全可以的,但是…… MVC试图使用我的文化设置在内部对其进行解码,期望数字格式为1 5432,所以转换失败了。
所以,要记住的事情:如果你生活在陌生的国家,请仔细检查你的文化背景。

制作浮模型活页夹。 这可以从表单集合中提取适当的值,解析它,并将其作为参数返回

 { price: '1,5' } 

应该没事。

编辑:你需要使用jQuerypost吗? 有没有什么办法可以使用内置的ajax支持创建一个链接,那么结果是什么? 例如

 Ajax.ActionLink("Link Name", "OpenTrade", "Home", new { price = 1.5f }, new AjaxOptions { OnSuccess = "success", .... }) 

指定浮点值时,通常必须使用’f’对值进行后缀,例如

 float f = 1.5f; 

你试过这个吗?

另一种解决方案是将您的服务方法更改为:

 [AcceptVerbs( HttpVerbs.Post)] public void OpenTrade(int dollars, int cents) 

您是否检查过服务器的JSON响应是什么? 我注意到你没有用双引号封装你的价格变量,所以你对服务器的post将如下所示:

 {'price':1.5} 

我不知道这只是一个数据参数的问题,但我怀疑你真正想要的是什么

 "{'price':1.5}" 

传递给ASP.Net方法的jQuery ajax方法应该有一个数据参数的字符串,否则jQuery可能会错误地序列化数据。 拥有字符串意味着jQuery将保留您的JSON对象并将整个字符串传递给ASP.NET以便在服务器端进行解析。

 UpdateImage(string rotationAngle) { double d; double.TryParse(rotationAngle, System.Globalization.NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out d);