Не отображается enum в представлении

206
31 марта 2017, 21:34

Всем привет. У меня такой вопрос. Я добавил 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>
        }
Answer 1

Если Вы объявляете перечисление следующим образом:

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.

READ ALSO
Как изменить правило разбивки текста на строки в WPF?

Как изменить правило разбивки текста на строки в WPF?

Я использую FormattedText класс чтобы рисовать текст наподобие:

373
PHP Curl Как вытянуть значения?

PHP Curl Как вытянуть значения?

Всем привет! В общем нужно вытянуть значение из (div class="yt-lockup yt-lockup-tile yt-lockup-video clearfix" data-context-item-id="Aj0F3D_XDm0" data-visibility- tracking="CEEQ3DAYAyITCMTl0sOg-tICFUfMHQodzD4EnCj0JEDtnNz-w7vBngI=")

240
MYSQL LIKE REGEXP

MYSQL LIKE REGEXP

Пытаюсь сделать проверку на совпадения в БДПривожу к единому виду переменную для проверки -

292