2008-10-13 2 views
7

С вид двигателя/шаблон ASPX/ASHx страниц ASP.NET в путь плюнуть на экран, кажется:Microsoft MVC «Эхо/Печать/выход» и т.д.

<%= Person.Name %> 

Что было хорошо с WebForms, как много данные модели были связаны с программным обеспечением. Но с MVC мы теперь используем этот синтаксис больше oftern.

Вопрос, который у меня есть, довольно тривиален, но раздражает в любом случае. Это то, что это, кажется, разбивают размечать т.е .:

<% foreach(var Person in People) { %> 
    <%= Person.Name %> 
<% } %> 

Это кажется много открытия и закрытия тегов для меня!

Другой вид двигателей в вно MVC иметь средство плеваться на экран с из открывающего и закрывающего тегов сценария с использованием стандартного ключевого слова, такие как «печать, из, эхо», то есть (гитов пример):

<% 
for element in list: 
     output "<li>${element}</li>" 
end 
%> 

Теперь я сказал, что это может показаться тривиальным, но это кажется более читаемым. Итак, каковы преимущества MS, имеющие этот синтаксис, а не предоставление метода вывода?

Cheers, Крис.

ответ

11

Рассмотрим что-то вроде этого, вместо:

<% foreach(var Person in People) { 
    Response.Write(Person.Name); 
} %> 

Я считаю, что будет работать. (Хотя я не проверял, я только начал с MVC и не имеют набор инструментов здесь, в офисе.)

EDIT: Я, видимо, пропустил фактический вопрос ... :)

Microsoft предоставляет метод вывода, но не предоставляет такой синтаксис, как тот, который вы описываете. Метод вывода: Response.Write(). Я не могу ответить на это напрямую (я считаю, что вам нужно будет проверить со Скоттом Хансельманом в MS :)), но я думаю, что они не хотели усложнять скрипты, добавляя еще один язык для нас, чтобы учиться; Я думаю, что они хотели использовать языки (C#, VB и т. Д.), Которые разработчики уже знали.

РЕДАКТИРОВАТЬ # 2: Я добавил следующее в комментарии, и в ретроспективе (для полноты) он должен быть частью ответа.

Если вы над головой Learn MVC site on ASP.NET, по мнению учебника (это ссылка), вы увидите следующий пункт:

Поскольку вы называете Response.Write() так часто, Microsoft предоставляет вам ярлык для вызова метода Response.Write(). Вид в В листинге 3 используются разделители <%= и %> в виде ярлыка для вызова Response.Write().

По существу, <%= %> является общепринятым сокращением для Response.Write, и поэтому вы можете использовать полный Response.Write метод в любом месте вы бы использовать <%= %>.

+0

Это работает отлично. –

+1

Несмотря на то, что вам понадобится полуть двоеточие в конце отчета Response.Write. –

+0

Мой плохой! Я еще раз обновлю. :) –

0

То, что вы ищете, вероятно, отличается от механизма просмотра - каждый из них управляет встроенным кодом, как это по-своему.Проверьте NHaml, двигатель ASP.Net Rails 'Haml.

еще несколько вид двигателей, чтобы посмотреть на: Brail, NVelocity

0

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

John- Я считаю, что Response.Write (Person.Name) будет просто отображать строку в верхней части страницы перед любым другим выходом. Не на 100%, хотя, больно дайте ему удар.

Edit:

По-видимому, Response.Write (Person.Name) работает как это было предложено. Ну, это было легко. Спасибо :-) Джон.

+0

Проверьте http://www.asp.net/learn/mvc/tutorial-04-cs.aspx. <%= %> - это ярлык для Response.Write. –

0

Я слышал, что они работают над улучшением этого для ASP.Net 4 через клиентские шаблоны.

0

Другой вариант, кроме Response.Write бы написать Xhtml с XSL transformations

+0

Правда, но зачем делать его более сложным, чем нужно? –

+1

Я не сказал, что это хороший вариант. Использование другого механизма просмотра будет предпочтительнее XSLT. Но кто знает; возможно, где-то там есть ситуация, к которой XSLT идеально подходит. Это могло случиться. –

1

Мой ответ основан на личном XP с MVC4 cshtml - вы можете использовать: @Html.Raw("SomeStringDirectlyInsideTheBrowserPageHTMLCode")

Это делает (динамический) строку на его позиции в отличие от Response.Write(MyString), который, насколько я заметил, всегда отображает строку в начале страницы браузера.

Обратите внимание, что HTML-теги, предоставленные @Html.Raw(MyString), не могут быть проверены компилятором. Я имею в виду: @ Html.Raw («< div .... >») не может быть закрыт простым </div >, потому что вы получите сообщение об ошибке (< div .... > не обнаружено компилятором), поэтому вы должен закрыть тег с помощью @ Html.Raw ("</div >")

PS
В некоторых случаях это не работает (например, он не работает в DevExpress) - вместо этого используйте ViewContext.Writer.Write() или ViewContext.Writer.WriteLine().

+0

Я думаю, что это правильный метод для двигателя Razor. – beawolf

Смежные вопросы