首页 > 解决方案 > 输入类型编号奇怪的行为

问题描述

我正在构建一个水果和蔬菜电子商务应用程序。<input type="number">我已经为用户创建了一个系统,可以通过在表单中​​的字段中输入值来将商品添加到购物车中。

我遇到的问题是,例如,当我输入“1.2”时,我的服务器收到值“12”。但是当我输入值“1”时,我的服务器只收到值“1”。这真的让我很烦。有谁知道为什么会这样?

提前致谢。

一些上下文数据:我的后端是在 Asp.Net Core 3.x 中构建的。后端端点如下所示:

[HttpPost]
public ActionResult UpdateShoppingCart(int productId, float amount)
{   
    Console.WriteLine(amount);
    var selectedProduct = _productRepository.Products.SingleOrDefault(p => p.Id == productId);
    float productCount = 0;
    if(selectedProduct != null)
    {   
        productCount = _shoppingCart.UpdateCart(selectedProduct, realAmount);
    }
    return Redirect(Request.Headers["Referer"].ToString());
}


html部分看起来像这样

<div class="text-center">
    <div class="float-left">
        <p>Cantidad:</p>
    </div>
    <div class="float-right">
        <form method="post" class="form-inline" asp-controller="ShoppingCart" asp-action="UpdateShoppingCart">
            <input type="hidden" name="productId" value="@Model.Product.Id"/>
            <input name="amount" type="number" class="form-control h-auto input-add-to-cart" data-id="@Model.Product.Id" min=0 step="0.1" value="@(Model.ShoppingCartItem != null ? (Model.ShoppingCartItem.Amount).ToString(new CultureInfo("en-US")) : (0).ToString())"/>
            <button type="submit" id="update-button-@Model.Product.Id" disabled class="ml-1 btn btn-sm btn-outline-warning"><i class="material-icons material-icons-actual-font" disabled>shopping_cart</i>Actualizar</button>
        </form>
    </div>
  
</div>

更新:

ShoppingCartItem 模型的代码如下:

public class ShoppingCartItem
{
    public int Id { get; set; }
    public Product Product { get; set; }
    public int ProductId { get; set; }
    public float Amount { get; set; }
    public string ShoppingCartId { get; set; }
}

第二次更新:

难道是我在使用逗号作为点的线程中设置了一种文化?

Configure方法中Startup,我正在设置

var cultureInfo = new CultureInfo("es-CL");
cultureInfo.NumberFormat.CurrencySymbol = "$";

CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;

标签: htmlformsasp.net-coreinputnumbers

解决方案


好的,就是这样。

问题是我的浏览器将小数点分隔符设置为点(例如,4.7),而我的后端需要一个逗号(例如,4,7),所以这让我的应用程序感到困惑。

罪魁祸首是我第二次更新时发布的内容,那是

var cultureInfo = new CultureInfo("es-CL");

CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;

推荐阅读