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

Mar*_*uła 10 javascript c# asp.net-mvc jquery

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

$.post("Home/OpenTrade", { price: 1.5 }, function() { }, "json");
Run Code Online (Sandbox Code Playgroud)

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

[AcceptVerbs( HttpVerbs.Post)]
public void OpenTrade(float? price)
Run Code Online (Sandbox Code Playgroud)

我的价格总是空的.如果我省略?控制器根本没有调用(这并不奇怪),我尝试使用decimal以及double键入.此外,当我发送整数数据时,此功能有效(如果我发送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<double>(res);
        else
            return res;
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Joe*_*nez 5

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