Проверка MVC, похоже, не работает для текстовых полей, но подходит для числовых полей

#asp.net-mvc #unobtrusive-validation

Вопрос:

Похоже, у меня возникли проблемы с проверкой моей модели. Проверка поля «Название», похоже, не работает, в то время как проверка «Цена», похоже, работает нормально. Кроме того, на других страницах проверка, похоже, нормально работает с текстовыми полями, просто у меня проблема с этой страницей. Я слишком долго смотрел на это, так что был бы очень признателен за любую помощь.

Моя Модель

 public class Product
    {
        public int Id { get; set; }
        
        [Required(ErrorMessage = "This is Required Field")]
        public string Title { get; set; }
        
        public string Color { get; set; }
        
       
        [Required(ErrorMessage = "This is Required Field")]
        public decimal Price { get; set; }

    }
 

Этот Вид

     @using (Html.BeginForm())
    {
        <table>
            <tr>
                <td>
                    <label>Title:</label></td>
                <td>@Html.EditorFor(m => m.Title)</td>
                <td>@Html.ValidationMessageFor(m => m.Title)</td>
            </tr>
            <tr>
                <td>
                    <label>Color:</label></td>
                <td>@Html.EditorFor(m => m.Color)</td>
                <td>@Html.ValidationMessageFor(m => m.Color)</td>
            </tr>
            <tr>
                <td>
                    <label>Price:</label></td>
                <td>@Html.EditorFor(m => m.Price)</td>
                <td>@Html.ValidationMessageFor(m => m.Price)</td>
            </tr>
        </table>
        <button type="submit">Submit</button>
}
 

Действие

 [HttpPost]
        public ActionResult Add(Product model)
        {
            if(ModelState.IsValid)
            {
                return RedirectToAction("Index");
            }
            return View(model);
        }
 

У меня в файле web.config для ClientValidationEnabled и UnobtrusiveJavaScriptEnabled установлено значение true.

У меня также есть следующее в заголовочном файле

 <script src="/Scripts/jquery-3.3.1.js"></script>
<script src="/Scripts/jquery.validate.min.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js"></script>
 

Ответ №1:

попробуйте добавить итог проверки

  @using (Html.BeginForm())
{
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
.....
}
 

и поскольку десятичная дробь не может быть обнулена, по умолчанию она равна 0, поэтому запрос не будет работать, так как он не равен нулю. Поскольку это поле цены, попробуйте это , оно используется для валюты

 [DataType(DataType.Currency)]
[RegularExpression(@"^d .?d{0,2}$", ErrorMessage = "Wrong format")]
public decimal Price { get; set; }
 

Комментарии:

1. Извините @Serge, но это не сработало. Поле заголовка по — прежнему отказывается проверяться, если оставить его пустым