Является ли цикл foreach в MVC3 View единственным способом вывода пользовательского интерфейса - PullRequest
0 голосов
/ 08 декабря 2011

Сейчас я прохожу учебник по MVC3. Привязка к IEnumerable выполняется следующим образом:

@ModelType IEnumerable(Of Product)

@foreach (var p in Model) {
   <div class="item">
      <h3>@p.Name</h3>
      @p.Description
      <h4>@p.Price.ToString("c")</h4>
   </div>
}

Это единственный способ сделать это? Это попахивает старым классическим ASP способом ведения дел. [Мурашки]

Я не могу точно определить, что меня беспокоит, это может быть просто болью перехода от веб-форм, где корень кода - король.

Кто-нибудь, пожалуйста, успокойте мои страхи.

Ответы [ 3 ]

2 голосов
/ 08 декабря 2011

Это только попахивает, потому что у вас есть код там. Привязка данных делает то, что в веб-формах? Он дал вам кое-что для установки в коде, который «магически» работал на вашем уровне представления, обычно с помощью черной магии и вызывая различные методы, отмеченные в разметке xml. Вы не могли отследить, что и когда делалось, вы передавали «объект e» как eventargs и т. Д. Это было грязно.

приведенный выше код чистый. Нет необходимости возвращаться к коду, и вам не нужно ждать новой версии элемента управления, чтобы что-то исправить для будущих браузеров.

ASP смешанная бизнес-логика на уровне представления. Вышеупомянутый код является только уровнем представления, поэтому ваш код в порядке.

Вы можете использовать WebGrid или сетку Telerik (или MVCContrib) для лучшего отображения и более «привязывающих» вещей, или вы можете использовать DisplayTemplates для настройки этого представления, чтобы вы могли просто сказать Html.DisplayFor () везде, где вы используете этот объект без необходимо повторить приведенный выше код.

1 голос
/ 08 декабря 2011

Вы можете использовать перегрузку Html.DisplayForModel, которая также принимает имя шаблона, который будет использоваться для отображения IEnumerable(Of Product). Таким образом, ваше мнение будет выглядеть как

@Html.DisplayForModel("ItemList")

Вот пример для этой процедуры здесь . Однако, поскольку вы хотите настроить формат отображения для перечислимой последовательности, в какой-то момент (в данном случае, внутри шаблона отображения "ItemList") вам придется написать код как выше.

1 голос
/ 08 декабря 2011

Я не уверен, что это единственный способ. Если вы настаиваете, вы можете написать HTML Helper и сделать это в коде, если вы действительно этого хотите. Однако тогда вы используете StringBuilder или какой-то другой грубый механизм написания HTML.

Когда я хочу, чтобы ASP.NET соответствовал Repeater в MVC, я пишу цикл for и нахожу его гораздо проще и более гибким, особенно с синтаксисом Razr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...