TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #3177 1.8K
День 2650. #ВопросыНаСобеседовании
Марк Прайс предложил свой набор из 60 вопросов (как технических, так и на софт-скилы), которые могут задать на собеседовании.

32. Синтаксис Razor
«Расскажите, что такое Razor и как он используется в приложениях ASP.NET Core? Приведите пример».

Хороший ответ
Razor — это синтаксис разметки, который позволяет встраивать код C# в HTML-документы для динамической генерации HTML-контента на сервере перед его отправкой клиенту. Он используется в основном в представлениях ASP.NET Core MVC, Razor Pages и веб-приложениях Blazor для создания динамических веб-страниц.

Блоки кода в Razor начинаются с символа @, который помогает компилятору отличать код C# от HTML. Это позволяет беспрепятственно интегрировать серверную логику в структурированный HTML-файл, расширяя возможности рендеринга веб-страниц на основе динамических данных.

В качестве примера синтаксиса Razor в представлении ASP.NET Core MVC рассмотрим простую модель, представляющую продукт:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}

В следующем представлении показано, как отобразить список продуктов:
@model IEnumerable<Product>
<h2>Список Продуктов</h2>
<table>
<thead>
<tr>
<th>Название</th>
<th>Цена</th>
</tr>
</thead>
<tbody>
@foreach (var p in Model)
{
<tr>
<td>@p.Name</td>
@* Денежный формат *@
<td>@p.Price.ToString("C")</td>
</tr>
}
</tbody>
</table>


В этом примере синтаксис Razor используется для итерации по коллекции объектов Product, переданных в представление из контроллера. Он динамически генерирует строки таблицы (<tr>) для каждого продукта с его названием и ценой. Символ @ используется для вставки кода C# в HTML для итерации по списку и отображения данных.

Преимущества использования Razor включают:
- Повышение производительности: Razor снижает сложность написания и поддержки динамических веб-страниц, позволяя разработчикам писать код C# непосредственно в представлении.
- Строгая типизация: Используя C# в представлении, Razor поддерживает IntelliSense и проверку кода во время компиляции, уменьшая количество ошибок во время выполнения.
- Чёткое разделение: Razor помогает поддерживать чёткое разделение задач между логикой пользовательского интерфейса и логикой бэкэнда, придерживаясь паттерна MVC.

Часто встречающийся неверный ответ
«Синтаксис Razor — это просто использование символа @ для написания любого кода C# непосредственно в HTML. Можно выполнять любую бизнес-логику в представлении, чтобы манипулировать данными так, как вам нужно».

Почему это неправильно
- Неправильное использование Razor для бизнес-логики: Этот ответ предполагает ненадлежащее использование представлений Razor для выполнения бизнес-логики, что нарушает принцип разделения ответственности в MVC. Представления Razor предназначены для обработки логики представления, а не бизнес-логики.

- Потенциальные проблемы с избыточностью и поддержкой: Встраивание сложной логики C# в представления Razor может привести к избыточному, трудно поддерживаемому коду. Это затрудняет чтение и управление представлением, особенно для других разработчиков или при возвращении к коду через некоторое время.

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

Эта ошибка обычно возникает из-за непонимания ролей в паттерне MVC или из-за опыта работы с фреймворками веб-разработки, которые нечетко разделяют бизнес-логику и логику представления.

Источник: https://github.com/markjprice/tools-skills-net8/blob/main/docs/interview-qa/readme.md
  • 👎 7
  • 👍 4
More from @netdeveloperdiary
  1. Sep 27, 2026День 2797. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Окончание Начало Продол…
  2. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  3. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  4. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  5. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
  6. Sep 22, 2026День 2792. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →