Вопрос по asp.net-mvc, foreach – Как можно избежать исключения NullReferenceException в цикле foreach в представлении, когда моя модель пуста?

4

Я получаю & quot; NullReferenceException не было обработано кодом пользователя & quot; ошибка со следующим кодом в моем представлении, когда я передаю нулевое значение через мой контроллер. Есть ситуации, когда я хочу передать нулевое значение, но я не хочу, чтобы в этом случае возникала ошибка. На что я должен изменить свой код?

Первоначально мой код был:

@foreach (var item in Model.MyModelStuff)
{
    <tr>
        <td>
                @Html.DisplayFor(modelItem => item.Bla.Title)
        </td>
    <tr>
}

Я пробовал следующее безуспешно:

@foreach (var item in Model.MyModelStuff.Where( item => item.MyModelStuff != null))
etc. . . 

Как мне изменить код, чтобы он обрабатывал ноль, не выдавая ошибку? Я прочитал, что мне может понадобиться вернуть пустую коллекцию моей модели (?), Как мне поступить, если это действительно необходимо?

Ваш Ответ

2   ответа
6

Если я правильно понимаю, ваша коллекция пуста.

Коллекция никогда не должна быть нулевой, как вы сказали, что вместо этого вы должны вернуть пустую коллекцию и не допустить повреждения вашей коллекции, не раскрывая реальную коллекцию:

public IList<Employee> Employees
{
    get; 
    private set;
}

И инициализировать вашу коллекцию внутри конструктора

this.Employees = new List<Employee>();
7

Честно говоря, я думаю,null модель плохой выбор. Но если вы настаиваете, просто добавьтеif проверять:

@if (Model != null) {
    foreach (var item in Model.MyModelStuff)
    {
        <tr>
            <td>
                    @Html.DisplayFor(modelItem => item.Bla.Title)
            </td>
        <tr>
    }
}
Хорошо, это все исправляет. Что является лучшим решением - я позволяю пользователям просматривать список своих курсов (например, школу) - если у них нет курсов, их список курсов не имеет значения - что мне делать вместо него? Ecnalyr
Как насчет возврата действительной (ненулевой) модели, но создания экземпляраModel.MyModelStuff дляempty список / перечислимый, а не нулевой? Тогда ваш код представления хорошо упрощается.

Похожие вопросы