Я довольно новичок в шаблоне MVC, и по мере того, как я углубляюсь в развитие этой логики, мне приходится сталкиваться с некоторыми проблемами, которые я могу преодолеть, но я не уверен, что я делаю это правильно (лучшая практика).Модель MVC и гибкость?
Так что вопрос:
У меня есть View
, который получает Model
, который имеет следующую структуру:
public class MyViewModel
{
public string Title { get; set; }
public string Subtitle { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
public string Property3 { get; set; }
public List<MyItem> ListOne { get; set; }
public List<MyItem> ListTwo { get; set; }
public List<MyItem> ListThree { get; set; }
public List<MyItem> ListFour { get; set; }
public List<MyItem> ListFive { get; set; }
}
Я хочу View
, чтобы показать первый элемент из каждой List
только тогда, когда в списке есть записи в нем. Так что я пытаюсь сделать на View
сейчас что-то вроде этого:
<div>
@if(Model.ListOne != null)
{
<img src="@Html.DisplayFor(model => Model.ListOne.First().Filename)" style="max-height: 800px;max-width:800px; padding-bottom: 5px;" />
}
</div>
, но когда я запускаю код, я получаю сообщение об ошибке с указанием System.InvalidOperationException: Sequence contains no elements
. Таким образом, я понимаю, что представление сначала полностью отображается, и после этого анализируется код внутри и преобразован в окончательный вывод HTML (как это работает?) Может также использовать некоторые пояснения здесь)
Итак, что является лучшим способом для этого? Вы теряете гибкость при использовании MVC? Прямо сейчас, похоже. Это было бы намного проще, если бы ваш код «смешивался» с HTML. Не поймите меня неправильно, мне очень ясно, что преимущества, связанные с использованием шаблонов проектирования, приносят разработчику, но для этой конкретной проблемы мне действительно интересно узнать, насколько это гибко.
Делает полный смысл! Свойство не будет равно нулю, потому что я всегда инициализирую его в контроллере. Я не знал о методе Any(), спасибо Стивен. Также благодарим вас за разъяснение способа визуализации кода. Если это позволяет мне смешивать код с HTML, то я предполагаю, что гибкость не скомпрометирована настолько, насколько я думал! Еще раз спасибо! – fobia
Только мои два цента на этом. Следует попытаться сделать ViewModel максимально приближенным к его потреблению в представлении.Если в представлении всегда отображается первый элемент из этих списков, возможно, вам стоит вернуться к ViewModel и просто иметь в них отдельные объекты (а не списки). – bazz
@Bazz да полностью согласен - гораздо чище иметь то, что вам нужно в представлении, готовом к работе, и свести logix к минимуму - указало бы это и на ответ, но не захотело мутить вода! –