我最近正在使用 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)
我的价格始终为空。如果我省略?
控制器根本没有被调用(这并不奇怪),我尝试过使用decimal
也double
类型。此外,当我发送整数数据时,此函数起作用(如果我发送1
该控制器被调用,并且float? price
已正确填写)。我错过了什么,还是一个错误?
广告。我可以以字符串形式接收价格,然后手动解析它,但我不喜欢这个解决方案,因为它不优雅,而且违背了使用 MVC 等框架为我完成此操作的全部目的。
编辑和回答:根据乔尔的建议,我创建了一个模型绑定器,我将发布它,也许有人会使用它:
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
}
可以注册为double和double吗?活页夹,双份?如果值无法解析,它将把 null 传递给控制器。
顺便提一句。有什么想法为什么浮点数和双精度数不能开箱即用(对我来说?)?
编辑2和解决方案:好吧,这会很有趣:)。它对我不起作用,因为请求的字符串正在发送1.5432
(示例值),这是完全可以的,但是... MVC 试图使用我的区域性设置在内部对其进行解码,该设置期望数字采用格式 1,5432,因此转换已默默失败。
所以,要记住的是:如果您生活在陌生的国家,请仔细检查您的文化背景。