Я не уверен, что ищу это неправильно, но я не могу определить, как null проверить @Html.DisplayNameFor.
У меня есть IEnumerable<model>, у которого есть model.Numbersmodel.Order и model.Time:
@Html.DisplayNameFor(Model => Model.Numbers)
и т.п.
Я пытался сделать это, но VS выдает ошибку:
@Html.DisplayNameFor(Model => Model?.Numbers)
Но я получаю это сообщение, когда я нахожусь над красной волнистой линией в VS:
An expression tree lambda may not contain a null propagating operator
Я также пробовал добавлять where() и @Html.DisplayNameFor(Model => Model.Numbers.Any()), но это не работает.
Мой код:
@model IEnumerable<BusinessLayer.NumbersModel>
...
<table class = "table table-sm">
<thead class = "thead-dark">
<tr>
<th>@Html.DisplayNameFor(Model => Model.Numbers)</th>
<th>@Html.DisplayNameFor(Model => Model.Order)</th>
<th>@Html.DisplayNameFor(Model => Model.Time)</th>
</tr>
</thead>
@foreach (var item in Model)
{
if (item.Numbers != null && item.Order != null && item.Time != null)
{
<tr>
<td>@Html.DisplayFor(m => item.Numbers)</td>
<td>@Html.DisplayFor(m => item.Order)</td>
<td>@Html.DisplayFor(m => item.Time)</td>
<td><i class = "m-icon--edit"></i> @Html.ActionLink("Edit", "Edit", new { id = item.ID }, new { @class = "m-numbers__link" })</td>
<td>
@using (Html.BeginForm("Delete", "Numbers", new { id = item.ID }))
{
<i class = "m-icon--delete"></i> <input type = "submit" value = "Bin" onclick = "return confirm('You are about to delete this record');" />
}
</td>
</tr>
}
}
</table>
Модель:
public class NumbersModel
{
public int ID { get; set; }
public string Numbers { get; set; }
public string Order { get; set; }
public string Time { get; set; }
}
An expression tree lambda may not contain a null propagating operator. — это то, что я получаю, когда навожу курсор на красную волнистую линию в VS с помощью ?Вы можете прочитать принятый ответ для этого вопрос
Если ваш @model — это IEnumerable<model>, то, конечно же, вы не можете называть .Numbers и т. д. по этому поводу. Вероятно, у вас есть цикл на странице, который перечисляет Model, и это переменная цикла, которую вы передаете лямбде.
У меня есть цикл после трехкратного вызова DisplayNameFor, который перебирает модели и отображает данные через DisplayFor
Это не имеет смысла. Можете ли вы показать эту часть представления, включая пункт @model?
Да, сейчас я отредактирую свой вопрос.
Я все еще не уверен, но, похоже, вы хотите что-то вроде DisplayNameFor(m => m.First().Numbers).
что такое тип Model.Numbers?
1) Пожалуйста, объясните, чего вы ожидаете от этого кода: DisplayNameFor(Model => Model.Numbers) 2) Пожалуйста, покажите нам класс для вашей модели.
Я снова отредактирую свой вопрос - все они строки.





Ваш @model — IEnumerable<T>. У него нет .Numbers или .Order, есть у содержащихся в нем объектов.
DisplayNameFor() нужно только знать тип выражения, из которого можно получить атрибут DisplayAttribute. Выражение, которое вы передаете ему, не должно вычисляться для ненулевого экземпляра объекта, оно не будет выполняться для его результата.
Так
<thead class = "thead-dark">
<tr>
<th>@Html.DisplayNameFor(m => m.First().Numbers)</th>
<th>@Html.DisplayNameFor(m => m.First().Order)</th>
<th>@Html.DisplayNameFor(m => m.First().Time)</th>
</tr>
</thead>
Это будет работать, даже если .Numbers равно нулю, или .First() равно нулю, или весь Model равен нулю.
Обычно вам не нужно обрабатывать пустые значения при передаче деревьев выражений помощникам ASP.NET MVC.
Какую ошибку вы получаете?