gpt4 book ai didi

c# - JQuery + Asp.Net MVC,传递 float

转载 作者:可可西里 更新时间:2023-11-01 02:45:06 25 4
gpt4 key购买 nike

我最近在使用 MVC,在尝试使用 ajax 向我的 Controller 发送请求时遇到了一个奇怪的问题。我正在使用 MVC 直接附带的 JQuery(版本 1.3.2),我正在尝试发送这样的 ajax 请求:

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

我还尝试了 parseFloat("1.5") 而不是 1.5
当我尝试使用

在 Controller 中接收此值时
[AcceptVerbs( HttpVerbs.Post)]
public void OpenTrade(float? price)

我的价格始终为空。如果我省略 ? 则根本不会调用 Controller (这不足为奇),我尝试使用 decimal 以及 double 类型.此外,此函数在我发送整数数据时起作用(如果我发送 1 将调用此 Controller ,并且 float?price 已正确填充)。我是否遗漏了什么,或者这是一个错误?

广告。我可以接收字符串形式的价格,然后手动解析它,但我不喜欢这个解决方案,因为它不够优雅,而且它违背了使用像 MVC 这样的框架为我做这件事的全部目的。

编辑和回答:根据 Joel 的建议,我创建了一个模型 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
}

可能注册成double和double?粘合剂,双?如果无法解析值,它会将 null 传递给 Controller ​​。

顺便说一句。知道为什么 float 和 double 不能开箱即用(对我来说?)吗?

Edit2 和解决方案: 好的,这会很有趣 :)。它对我不起作用,因为请求的字符串正在发送 1.5432 (示例值),这完全没问题,但是...... MVC 试图使用我的文化设置在内部解码它,这是期望数字的格式为 1,5432,因此转换已无提示地失败。
因此,请记住:如果您生活在陌生的国家/地区,请仔细检查您的文化设置。

最佳答案

制作一个 float 模型 Binder 。这可以从表单集合中提取适当的值,解析它,并将它作为参数返回

关于c# - JQuery + Asp.Net MVC,传递 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1285819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com