Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

<partial name="Partials/_Menu" />

</header>

<div class="container">

<main role="main" class="pb-3">

@RenderBody

</main>

</div>

<footer class="border-top footer text-muted">

<div class="container">

&copy; 2021 - AutoLot.Mvc - <a asp-area="" asp-controller="Home"

asp-action="Privacy">Privacy</a>

</div>

</footer>

<partial name="Partials/_JavaScriptFiles" />

@await RenderSectionAsync("Scripts", required: false)

</body>

</html>

Отправка

данных представлениям

Существует несколько способов отправки данных представлению. В случае строго типизированных представлений данные можно отправлять, когда представления визуализируются (либо из метода действия, либо через вспомогательную функцию дескриптора

<partial>
).

Строго типизированные представления и модели представлений

При передаче методу

View
модели или модели представления значение присваивается свойству
@model
строго типизированного представления (обратите внимание на букву
m
в нижнем регистре):

@model IEnumerable<Order>

Свойство

@model
устанавливает тип для представления, к которому затем можно получать доступ с использованием Razor-команды
@Model
(обратите внимание на букву
М
в верхнем регистре):

@foreach (var item in Model)

{

// Делать что-то.

}

В методе действия

RazorViewSyntax
демонстрируется представление, получающее данные из этого метода действия:

[HttpGet]

public IActionResult RazorSyntax([FromServices] ICarRepo carRepo)

{

var car = carRepo.Find(1);

return View(car);

}

Значение модели может быть передано и в

<partial>
, как показано ниже:

<partial name="Partials/_CarListPartial" model="@Model"/>

Объекты ViewBag, ViewData и TempData

Объекты

ViewBag
,
ViewData
и
TempData
являются механизмами для отправки представлению данных небольшого объема. В табл. 31.1 описаны три механизма передачи данных из контроллера в представление (помимо свойства
Model
) либо из контроллера в контроллер.

И

ViewBag
,
и
ViewData
указывают на тот же самый объект; они просто предлагают разные способы доступа к данным. Еще раз взгляните на созданный ранее файл
_HeadPartial.cshtml
(важная строка выделена полужирным):

<meta charset="utf-8" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<title>@ViewData["Title"] - AutoLot.Mvc</title>

<link rel="stylesheet" href="#" />

<link rel="stylesheet" href="#" />

Вы заметите, что в атрибуте

<ctitle>
для установки значения применяется объект
ViewData
. Поскольку
ViewData
— конструкция Razor, она предваряется символом
@
. Чтобы увидеть результаты, модифицируйте представление
RazorSyntax.cshtml
следующим образом:

@model AutoLot.Models.Entities.Car

@{

ViewData["Title"] = "RazorSyntax";

}

<h1>Razor Syntax</h1>

...

Теперь после запуска приложенияи перехода поссылке

https://localhost:5001/Home/RazorSyntax
вы увидите на вкладке браузера заголовок Razor Syntax —
AutoLot.Mvc
(Синтаксис Razor —
AutoLot.Mvc
).

Вспомогательные функции дескрипторов

Вспомогательные функции дескрипторов являются новым средством, введенным в версии ASP.NET Core. Вспомогательная функция дескриптора (tag helper) — это разметка (специальный дескриптор или атрибут в стандартном дескрипторе), представляющий код серверной стороны, который затем помогает сформировать выпускаемую HTML-разметку Они значительно совершенствуют процесс разработки и улучшают читабельность представлений MVC.

В отличие от вспомогательных функций HTML, которые вызываются как методы Razor, вспомогательные функции дескрипторов представляют собой атрибуты, добавляемые к стандартным HTML-элементам или автономным специальным дескрипторам. В случае использования для разработки среды Visual Studio появляется дополнительное преимущество в виде средства IntelliSense, которое отображает подсказки по встроенным вспомогательным функциям дескрипторов.

Например, показанная ниже вспомогательная функция HTML создает метку для свойства

FullName
заказчика:

@Html.Label("FullName","Full Name:",new {@class="customer"})

В итоге генерируется следующая HTML-разметка:

<label class="customer" for="FullName">Full Name:</label>

По всей видимости, синтаксис вспомогательных функций HTML хорошо понятен разработчикам на языке С#, применяющим ASP.NET МУС и Razor. Но его нельзя считать интуитивно понятным, особенно для тех, кто имеет дело с HTML/CSS/JavaScript, но не с языком С#.

Поделиться с друзьями: