首页 > 解决方案 > Asp net 输入价格值

问题描述

在 Asp.net 网络核心表单中,我有字段价格。当我尝试输入像 255,55 这样的价格时,验证失败告诉我,这不是一个数字。当我尝试 255.55 时,验证接受它,但它随后被读取为 2.555,00

这些是视图和模型:

    @model IEnumerable<Product>

@{ ViewBag.Title = "All Products";
    Layout = "_AdminLayout";}

<table class="table-striped table-bordered" style="width:80%">
    <tr>
        <th class="text-right">ID</th>
        <th>Name</th>
        <th class="text-right">Price</th>
        <th class="text-center">Actions</th>

    </tr>
    @foreach (Product item in Model)
    {

    <tr>
        <td>@item.ProductID</td>
        <td>@item.Name</td>
        <td class="text-right">@item.Price.ToString("c")</td>
        <td class="text-center">
            <form asp-action="Delete" method="post">
                <a asp-action="Edit" class="btn btn-sm btn-danger"
                   asp-route-productId="@item.ProductID">Edit</a>
                <input type="hidden" name="ProductID" value="@item.ProductID" />
                <button type="submit" class="btn btn-danger btn-sm">Delete</button>
             </form>
        </td>
    </tr>

    }
</table>
<div class="text-center"><a asp-action="Create" class="btn btn-default">Add Product</a></div>

    namespace SportStore.Models
    {
        public class Product
        {
            public int ProductID { get; set; }

            [Required(ErrorMessage ="Please enter a product name")]
            public string Name { get; set; }
            [Required(ErrorMessage = "Please enter a product description")]
            public string Description { get; set; }
            [Range(0.01, double.MaxValue, ErrorMessage = "Please enter a positive price")]
            [Required]
            public decimal Price { get; set; }
            [Required(ErrorMessage = "Please specify a category")]
            public string Category { get; set; }
        }
    }

为了使它工作,我在 Startup 的 Configure 方法中应用了以下补丁:

 var defaultDateCulture = "it-IT";
            var ci = new CultureInfo(defaultDateCulture);
            ci.NumberFormat.NumberDecimalSeparator = ".";
            ci.NumberFormat.CurrencyDecimalSeparator = ".";

            // Configure the Localization middleware
            app.UseRequestLocalization(new RequestLocalizationOptions
            {
                DefaultRequestCulture = new RequestCulture(ci),
                SupportedCultures = new List<CultureInfo>
                {
                    ci,
                },
                SupportedUICultures = new List<CultureInfo>
                {
                    ci,
                }
            });

但是如果我替换“。” 使用“,”我遇到了同样的问题

标签: c#asp.net-mvcformscurrency

解决方案


[RegularExpression(@"^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$", ErrorMessage = "Please enter valid price")]

我认为您需要对价格使用正则表达式


推荐阅读