Представления

Введение в представления

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Хотя работа приложения MVC управляется главным образом контроллерами, но непосредственно пользователю приложение доступно в виде представления, которое и формирует внешний вид приложения. В ASP.NET MVC 4 представления представляют файлы с расширением cshtml/vbhtml/aspx/ascx, которые содержат код с интерфейсом пользователя, как правило, на языке html. Стандартное представление:

@{
    Layout = null;
}

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>SomeView</title>
</head>
<body>
    <div>
        <h2>@ViewBag.Message</h2>
    </div>
</body>
</html>

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

#pragma checksum "c:\users\hp\documents\visual studio 2013\Projects\MVC\BookStore\BookStore\Views\Home\SomeView.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "1F05F4D370C9D00F8CBDFB8BD1F51D74189D0617"

namespace ASP {
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Web;
    using System.Web.Helpers;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.WebPages;
    using System.Web.Mvc;
    using System.Web.Mvc.Ajax;
    using System.Web.Mvc.Html;
    using System.Web.Optimization;
    using System.Web.Routing;
    using BookStore;
    
    public class _Page_Views_Home_SomeView_cshtml : System.Web.Mvc.WebViewPage<dynamic> {
        
#line hidden
        
        public _Page_Views_Home_SomeView_cshtml() {
        }
        
        protected ASP.global_asax ApplicationInstance {
            get {
                return ((ASP.global_asax)(Context.ApplicationInstance));
            }
        }
        
        public override void Execute() {
BeginContext("~/Views/Home/SomeView.cshtml", 0, 2, true);

WriteLiteral("\r\n");

EndContext("~/Views/Home/SomeView.cshtml", 0, 2, true);

            
            #line 2 "c:\users\hp\documents\visual studio 2013\Projects\MVC\BookStore\BookStore\Views\Home\SomeView.cshtml"
  
    Layout = null;

            
            #line default
            #line hidden
BeginContext("~/Views/Home/SomeView.cshtml", 27, 48, true);

WriteLiteral("\r\n\r\n<!DOCTYPE html>\r\n\r\n<html>\r\n<head>\r\n    <meta");

EndContext("~/Views/Home/SomeView.cshtml", 27, 48, true);

BeginContext("~/Views/Home/SomeView.cshtml", 75, 16, true);

WriteLiteral(" name=\"viewport\"");

EndContext("~/Views/Home/SomeView.cshtml", 75, 16, true);

BeginContext("~/Views/Home/SomeView.cshtml", 91, 29, true);

WriteLiteral(" content=\"width=device-width\"");

EndContext("~/Views/Home/SomeView.cshtml", 91, 29, true);

BeginContext("~/Views/Home/SomeView.cshtml", 120, 74, true);

WriteLiteral(" />\r\n    <title>SomeView</title>\r\n</head>\r\n<body>\r\n    <div> \r\n       <h2>");

EndContext("~/Views/Home/SomeView.cshtml", 120, 74, true);

BeginContext("~/Views/Home/SomeView.cshtml", 195, 15, false);

            
            #line 15 "c:\users\hp\documents\visual studio 2013\Projects\MVC\BookStore\BookStore\Views\Home\SomeView.cshtml"
      Write(ViewBag.Message);

            
            #line default
            #line hidden
EndContext("~/Views/Home/SomeView.cshtml", 195, 15, false);

BeginContext("~/Views/Home/SomeView.cshtml", 210, 38, true);

WriteLiteral("</h2> \r\n    </div>\r\n</body>\r\n</html>\r\n");

EndContext("~/Views/Home/SomeView.cshtml", 210, 38, true);
        }
    }
}

Хотя код не самый читабельный, особенно если не знать, что делают все эти классы и методы, но здесь мы можем увидеть, что при компиляции создается класс, наследующий от класса System.Web.Mvc.WebViewPage<T>, где T - это класс модели, которая будет использоваться. Но так как представление не строго типизированное, поэтому вместо имени класса модели идет ключевое слово dynamic. Все действия данного класса заключены в методе Execute, в котором с помощью метода WriteLiteral обрабатываются все имеющиеся в представлении элементы разметки html.

Найти сгенерированные из представлений файлы кода можно по пути C:\Users\Имя_Логина\AppData\Local\Temp\Temporary ASP.NET Files\root. Правда, все папки имеют зашифрованные имена, поэтому чтобы определить нужную папку приложения, нужно будет затратить некоторое время на поиск. Кроме того, сами генерируемые файлы кода также имеют зашифрованные имена. Так, выше приведенный класс в моем случеае имеет имя App_Web_nri53fza.1.cs и находится в папке root\307f1c1d\a36bbd4f.

Пути к файлам представлений

Все добавляемые представления, как правило, группируются по контроллерам в соответствующие папки в каталоге Views. Представления, которые относятся к методам контроллера Home, будут находиться в проекте в папке Views/Home. Однако при необходимости мы сами можем создать в каталоге Views папку с произвольным именем, где будем хранить дополнительные представления, необязательно связанные с определенными методами контроллера.

Чтобы произвести рендеринг представления в выходной поток, используется метод View(). Если в этот метод не передается имени представления, то по умолчанию приложение будет работать с тем представлением, имя которого совпадает с именем метода действия. Например, следующий метод действия будет обращаться к представлению Index.cshtml:

public ActionResult Index()
{
    IEnumerable<Book> books = db.Books;
    ViewBag.Books = books;
    return View();
}

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

public ActionResult Index()
{
    IEnumerable<Book> books = db.Books;
    ViewBag.Books = books;
    return View("~/Views/Some/SomeView.cshtml");
}

Создание нового представления в MVC 4

При создании представления нам предлагается целый ряд настроек:

Это диалоговое окно имеет следующие опции:

  • View Engine - выпадающий список для выбора движка представления. С ASP.NET MVC 4 данное диалоговое окно поддерживает несколько движков представлений. По умолчанию здесь представлены две возможности для выбора: Razor и ASPX. Но при установке сторонних движков они также могут быть доступны для выбора.

  • Create a strongly-typed view - эта опция позволит создать строго типизированное представление. После ее выбора нужно будет указать модель в выпадающем списке, который содержит список всех моделей. Но чтобы все модели приложения можно было использовать, перед добавлением представления нужно скомпилировать проект.

  • Scaffold template - опция позволяет выбрать шаблон формирования нового представления.

  • Типы шаблонов представления
    • Empty. Создается пустое представление. В представлении только определен тип модели с помощью директивы @model

    • Create. Создается представление с формой для создания новых объектов модели. Генерируется метка и поле редактирования для каждого свойства модели.

    • Delete. Создается представление с формой для удаления существующих объектов модели. Отображаются метка и текущее значение каждого свойства модели

    • Details. Создается представление, которое отображает метку и значение каждого свойства модели

    • Edit. Создается представление с формой для редактирования существующих объектов модели. Генерируется метка и поле редактирования для каждого свойства модели.

    • List. Создается представление с таблицей всех моделей. Столбцы отображают свойства модели. В данное представление вы должны передавать из метода контроллера значение типа IEnumerable<Тип_модели>. Представление также содержит ссылки на методы для выполнения операций создания/правки/удаления.

  • Reference Script Libraries - эта опция показывает, будет ли ваше представление включать набор файлов JavaScript. По умолчанию файл _Layout.cshtml содержит ссылку на главную библиотеку jQuery, однако не имеет ссылки на библиотеки jQuery Validation и Unobtrusive jQuery Validation.

    При создании представления, которое содержит форму ввода данных, как например, шаблоны представлений Edit или Create, установка данной опции гарантирует, что представление будет включать ссылки на вышеупомянутые библиотеки. Данные библиотеки необходимы для валидации ввода пользователя на стороне клиента. Во всех других случаях вы можете проигнорировать эту опцию.

  • Create as a Partial View - выбор этой опции указывает, что созданное представление будет неполным. В итоге представление будет вполне обычным, однако в его шапке не будет таких тегов, как <html> и <head>

  • Use a layout or Master Page - эта опция указывает, будут ли использоваться мастер-страницы (главные страницы) или представление будет самодостаточным. Для движка Razor указание мастер-страницы не является обязательным, если вы собираетесь использовать мастер-страницу, определенную по умолчанию в файле _ViewStart.cshtml. Однако, если вы хотите переопределить мастер-страницу, то можете воспользоваться этой опцией.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850