Когда модель представления, которую мы получаем из внешнего источника содержит какие-то объекты, для обращения к их классам придется писать в представлении полное название. Например:
@foreach (MyWebSite.Model.Person p in Model) { <li>@p.LastName @p.LastName (@p.Age) </li> }
Я тут решил явно указать тип переменной MyWebSite.Model.Person в цикле, хотя большинство сейчас просто использует var. Оба варианта рабочие, но если вы не хотите каждый раз писать MyWebSite.Model.Person, то можно подключить пространство имен так же, как и в C# коде с помощью using, просто в представлении перед этим ключевым словом нужно поставить символ @:
@using MyWebSite.Model @foreach (Person p in Model) { <li>@p.LastName @p.LastName (@p.Age) </li> }
В C# ключевое слово using может использоваться в двух значениях – для подключения пространств имен и для указания область видимости для объектов классов, которые реализуют интерфейс IDisposable. Здесь та же песня, только с @
@using (Html.BeginForm()) { // Здесь будет форма }
Это классический способ использования @using в представлениях с IDisposable. Html - это такой помощник, у которого есть методы, которые прячут HTML от программистов. Если честно, я не очень люблю это, но это мое личное мнение, я предпочитаю чистый HTML. Я считаю, что в представлении должна быть минимальная привязка к C# коду.
Но рассмотрим этот код и что он делает. У помощника Html есть метод BeginForm. Он выведет на страницу тэг <form> и вернет в качестве результата объект класса MvcForm, который в недрах фреймворка объявлен так:
public class MvcForm : IDisposable
У интерфейса IDisposable есть метод Dispose(). Когда объект этого типа уже не нужен системе, то вызывается метод Dispose, который проверяет, если открытый тэг не был закрыт, то его нужно закрыть и вывести на страницу </form>. Другими словами, когда мы выйдем за границы видимости @using, система закроет форму и в html коде мы увидим:
<form> // Здесь будет форма </form>
На самом деле там будут еще атрибуты action и method, а так же токен безопасности, но это все тема отдельного разговора про помощник Html. Пока опустим это, потому что разговор идет имено о @using.
Без using то же самое можно было бы сделать так:
@{var form = Html.BeginForm();} // Здесь будет форма @{form.EndForm();}
Здесь я явно открыл и закрыл форму методами BeginForm и EndForm соответственно. Как мы уже знаем, метод BeginForm возвращает объект, который я сохранил в переменной form, и когда форма уже не нужна, я вызываю метод EndForm этого объекта.