Asp net Ввод ценовых значений - PullRequest
0 голосов
/ 05 июня 2018

В форме ядра 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; }
        }
    }

Чтобы это работало, я применил следующеепатч в методе 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,
                }
            });

Но если я заменю «.»с "," я попадаю в ту же проблему

1 Ответ

0 голосов
/ 05 июня 2018
[RegularExpression(@"^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$", ErrorMessage = "Please enter valid price")]

я думаю, вам нужно использовать регулярное выражение для цены

...