2017-01-31 2 views
0

У меня возникла проблема, когда встроенное сообщение проверки не отображается в полях, которые являются десятичными. Типы Int работают так, как ожидалось, и делают это без аннотации данных. У меня есть следующие модели:MVC 5 встроенное сообщение проверки не отображается для десятичных чисел

public class Expense 
{ 
    public vwExpenseHeader ExpenseHeader { get; set; } 
    public tblExpenseDetail[] ExpenseDetail { get; set; } 
} 

В представлении у меня есть это:

  @for (int i = 0; i < 7; i++) 
      { 
       <td>@Html.EditorFor(m => m.ExpenseDetail[i].Breakfast, new { htmlAttributes = new { @class = "form-control", @onblur = "setCategoryTotal(this.id);" } })</td> 
      } 

В контроллере:

не
[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(Expense expense) 
    { 
     if (ModelState.IsValid) 
     { 
      using (AccountingClient acc = new AccountingClient()) 
       acc.ExpenseHeaderInsertOrUpdate(expense.ExpenseHeader, expense.ExpenseDetail); 

      return View("Saved"); 
     } 
     else 
      return View(expense); 
    } 

Вызов ModelState.IsValid делает работу, но появляется никаких сообщений о поле, которое не удалось проверить. Для поля int

  @for (int i = 0; i < 7; i++) 
      { 
       <td>@Html.EditorFor(m => m.ExpenseDetail[i].Mileage, new { htmlAttributes = new { @class = "form-control", @onblur = "setCategoryTotal(this.id);" } })</td> 
      } 

он работает должным образом. Сообщение «Пожалуйста, введите число». появляется.

У меня есть этот частичный класс

[MetadataType(typeof(tblExpenseDetailMetaData))] 
public partial class tblExpenseDetail 
{ 
    public string DateOfExpenseString 
    { 
     get { return DateOfExpense.ToString("MM/dd/yyyy"); } 
    } 
} 

и этот класс метаданных

public class tblExpenseDetailMetaData 
{ 
    [DataType(DataType.Currency)] 
    public decimal Breakfast; 
} 

В классе метаданных я попытался:

[Диапазон (0, double.MaxValue, ErrorMessage = "Пожалуйста, введите действительный двойной номер")]

и

[Диапазон (0, 1000)]

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

Добавление @ Html.ValidationMessageДля работ, и мне, скорее всего, придется использовать этот подход, но мне это не понадобится, если я смогу отобразить встроенное сообщение проверки.

Любая помощь или предложения приветствуются.

+0

Извините, но что вы в мире думаете? 'Html.ValidationMessageFor' показывает ошибки для определенного свойства, и вы говорите, что это действительно работает, то есть отображает ошибку так, как должна. Какую альтернативу вы ищете? Если вы говорите о 'Html.ValidationSummary', это показывает только непрофильные ошибки при передаче' true', т. Е. 'Html.ValidationSummary (true)', который является стандартным по умолчанию в виде подкладок. Если вы хотите, чтобы он отображал все, то не передавайте правду: 'Html.ValidationSummary()' –

+0

Мой плохой. Новое для MVC и сбивало с толку атрибут html5 на входе с тем, что, как я думал, было встроено в проверку MVC. – user2448445

+0

Тип ввода номера больше касается элемента управления, используемого для проверки. Браузер будет делать некоторые основные valudation, заставляя ввод быть числовым, но это скорее функция управления. Если вы используете проверку на стороне клиента, вы получаете более точную проверку и сообщения об ошибках, но для этого также требуется использование Html.ValidationMessageFor, так как именно там появится ошибка. –

ответ

0

Мой плохой. Новое для MVC и сбивало с толку атрибут html5 на входе с тем, что, как я думал, было встроено в проверку MVC.

Смежные вопросы