Всем привет. У меня такой вопрос. Я добавил enum в модель Task.cs и теперь вываливается ошибка "Constraint exception was unhandled by user code" в Index.cshtml в строчке @foreach (var t in Model).
public class Task
{
public int Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public string Description { get; set; }
[Range(1, int.MaxValue, ErrorMessage = "Select a correct license")]
public TaskStatus TaskStatus { get; set; }
}
enum TaskStatus
public enum TaskStatus
{
[Display(Name = "New")]
New,
[Display(Name = "Closed")]
Closed,
[Display(Name = "InProcess")]
Process,
[Display(Name = "Need Confirm")]
NeedConfirm
}
Index.cshtml
@foreach (var t in Model)
{
<tr class="task-row-link" title="Edit" data-link="@Url.Action("Edit", new { id=t.Id})">
<td class="centered"><p>@t.Id</p></td>
<td class="centered"><p>@t.Title</p></td>
<td class="centered"><p>@t.TaskStatus</p></td>
<td class="centered"><p>@t.Author</p></td>
<td class="centered"><p>@t.Description</p></td>
<td class="centered">
<p>
<a href="/Home/Delete/@t.Id">Delete</a>
</tr>
}
Если Вы объявляете перечисление следующим образом:
public enum TaskStatus
{
[Display(Name = "New")]
New,
[Display(Name = "Closed")]
Closed,
[Display(Name = "InProcess")]
Process,
[Display(Name = "Need Confirm")]
NeedConfirm
}
то значениями по умолчанию будет нумерация начиная с нуля (0, 1, 2, 3).
В Вашей модели Вы устанавливаете диапазон начиная с единицы:
[Range(1, int.MaxValue, ErrorMessage = "Select a correct license")]
public TaskStatus TaskStatus { get; set; }
Либо измените диапазон, либо задайте числовые значения для перечисления с единицы.
А еще проверьте, что Вы не используете случайно:
System.Threading.Tasks.TaskStatus
Также, перед использованием foreach делайте проверку, чтобы не падало исключение:
@if (Model != null)
{
foreach (var t in Model) // Model - должна быть коллекцией
{
...
}
}
Зайдите в контроллер, поставьте брэйкпоинт перед переходом на страницу и посмотрите, что Вы передаете в качестве модели, все ли заполнено.
Пожалуй, самым обязательным условием работы кода является то, что для того, чтобы работала строка @foreach (var t in Model) необходимо, чтобы модель (Model) - была коллекцией.
Также необходимо контролировать типы данных. Если в модели прописать определенный тип данных, то и в базе данных должен быть соответствующий. Иными словами, если в модели используется перечисление TaskStatus приводимое к int, то в базе данных должен быть тип int, но не varchar.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости