ASP.NET MVC 3 Razor Синтаксис вопрос - PullRequest
2 голосов
/ 27 марта 2011

Этот вопрос появляется, когда я работал с частичным представлением (MVC3 / Razor), но я уверен - это ясный вопрос о синтаксисе Razor, не связанный напрямую с частичным представлением.Итак - у меня есть частичное представление Menu.cshtml с полной разметкой как:

@model IEnumerable<SportsStore.WebUI.Models.NavLink>
@foreach(var link in Model)
{
    @Html.RouteLink(link.Text, link.RouteValues);
}

Нет проблем - родительский вид называет его @ {Html.RenderAction ("Menu", "Nav");} и всеработать как волшебство.Но, если я отредактирую Menu.cshtml как:

@model IEnumerable<SportsStore.WebUI.Models.NavLink>
@foreach(var link in Model)
{
    Html.RouteLink(link.Text, link.RouteValues);
}

(см. - НЕТ '@' до Html.RouteLink!), Все просто сломалось: now @ {Html.RenderAction ("Menu", "Nav ");} вывод полностью пустой, без одного HTML-тега.

Хотите знать - в чем разница между двумя фрагментами кода?Я предполагаю, что @ до foreach также автоматически «заходит» и также применяется к Html.RouteLink ?Итак - я не прав?

Ответы [ 2 ]

3 голосов
/ 27 марта 2011

Метод Html.RouteLink просто возвращает IHtmlString, содержащий ссылку; больше ничего не делает.

Когда вы пишете @Html.RouteLink(...), вы печатаете эту ссылку на страницу.
Когда вы пишете Html.RouteLink(...), вы вызываете метод, ничего не делая со ссылкой.
Таким образом, ничего не происходит.

3 голосов
/ 27 марта 2011

Знак @ перед оператором приводит к его записи в выходной поток. Когда вы его удаляете, все, что вы делаете - это вызываете метод метода для объекта Html.

Цель @ -оператора двойная. Его можно использовать для вывода выражения в поток ответов, как вы видели в первом примере. Другая функция - запустить блок кода. Вы можете видеть это второе поведение, используемое в вашем примере кода с @foreach(var link in Model)

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