#c# #asp.net #.net #asp.net-mvc #razor-pages
#c# #asp.net #.net #asp.net-mvc #страницы-бритвы
Вопрос:
У меня проблемы с razor, я пытаюсь получить доступ к первому элементу списка. Но когда я пытаюсь привести элемент с item2.hijos[0].ruta
помощью, я получаю сообщение об ошибке.
Но когда я использую item2.hijos.count()
, он возвращает 1. Итак, есть элемент, но почему-то razor не хочет, чтобы я получал к нему доступ.
Вот мой код. items2.hijos.first()
тоже не работает.
foreach (var item in Model)
{
<li id="@(item.CNombreManual)" onclick="mostrarEsconderHijos(this.id)" class="list-group-item-heading">@(item.CNombreManual)</li>
foreach (var item2 in item.hijos)
{
<li id="_@(item.cNombreManual)" class="list-group-item" style="tex-align:left; display:none">
@(item2.CNombreManual)
@Html.ImageActionLink("Ver PDF", "Descargar", "Manual", new { NombreArchivo = item2.hijos[0].Ruta }, null, "~/imgs/LecturaPdf.png")
</li>
}
}
Комментарии:
1. Установите точку останова в отладчике и проверьте
item2.hijos
там.
Ответ №1:
Просто проверьте, есть ли у вас элементы в массиве item2.hijos[] перед использованием массива. Это может быть печать значений для первых нескольких записей, а затем выдача ошибки, когда элемента нет. Так что это может происходить для любого массива hijos из item2 элемента. Просто убедитесь, что вы проверили размер массива перед его использованием.
item2.hijos[0].Ruta // replace this with the following
item2.hijos.Length > 0? item2.hijos[0].Ruta : 0
Я думаю, вы можете даже сделать короче. item2.hijos[0]?.Ruta ?? 0
Комментарии:
1. Спасибо! это решило проблему! мне пришлось немного его скорректировать, потому что ruta — это строка. я поместил это здесь, чтобы любой, у кого такая же проблема, мог также проверить мою правку ####- item2.hijos. Count()> 0? item2.hijos[0].Ruta:»0″ -####
2. @SergioHenrySilvaNavarro, рад это слышать. Спасибо.
Ответ №2:
Я не знаю подробностей вашей модели, но проблема в том, что вы повторяете (foreach) hijos элемента, но затем получаете доступ к hojos элемента 2.
Я думаю, вы хотите получить доступ item2.Ruta
:
foreach (var item2 in item.hijos)
{
(...) item2.Ruta // not item2.hijos[0].Ruta
Если вам действительно нужно получить доступ к item2.hijos [0].Ruta, тогда вам нужно сначала проверить, существует ли он.
Вы можете сделать это с помощью:
Вы также могли бы использовать item2.hijos.FirstOrDefault()?.Ruta
(см. Enumerable .Метод FirstOrDefault).
Кстати. весь hijos также может быть нулевым, поэтому может потребоваться проверить, вся ли коллекция (item2.hijos).
Наконец, вы можете добавить еще foreach
один для item2.hijas
, а не для доступа к элементу 0.