Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ASP.NET MVC Урок 1-F / ASP.NET MVC Урок 8

.pdf
Скачиваний:
42
Добавлен:
09.03.2016
Размер:
573.27 Кб
Скачать

$63 1(7 09& ǻȘȖȒ 9LHZ 5D]RU șȚȘȈȕȐȞȈ ȖȠȐȉȒȐ

tutorial

ASP*, .NET*

Цель урока. Научиться делать вывод данных в html, использование Razor. Helperы. PageableData. Динамические формы. RedirectToLogin, RedirectToNotFoundPage. Страница ошибки. RssActionResult.

Основа

Итак, рассмотрим как устроена часть View.

В контроллере все action­методы возвращают тип ActionResult. И для вывода результата мы используем:

UHWXUQ 9LHZ PRGHO'DWD

Основными параметрами View может быть:

Имя, обычно оно совпадает с именем action­метода. В случае если надо вызвать иной по имени View, то используется конструкция UHWXUQ 9LHZ ³9LHZ1DPH´ PRGHO'DWD

Данные для отображения во View. Необязательный параметр. При передаче во View этот объект данных будет обозначаться Model. Для связывания типа данных во View указывается ожидаемый тип данных:

#PRGHO /HVVRQ3URMHFW0RGHO 8VHU

Layout. Необязательный параметр. При указании этого параметра по данной строке найдется страница­контейнер и вызовется. View­часть будет обработана методом

RenderBody()

Выбор, какой же View использовать происходит следующим образом:

Ищется в папке /Areas/[Area]/Views/[ControllerName]/

Ищется в папке /Areas/[Area]/Views/Shared/

Ищется в папке /Views/[ControllerName]/ Ищется в папке /Views/Shared/

приступим к изучению.

Razor

При создании View есть выбор между двумя движками: ASPX и Razor. Первый мы не будем использовать в дальнейшем, поэтому поговорим о Razor.

ASPX был громозким движком с тегами ! для выполнения кода и !для вывода данных.

Razor использует конструкцию #0RGHO 1DPH. Т.е. всё, что начинается с #переводит в режим или исполнения кода, или вывода данных #IRUHDFK ^«`, или #LI ^ « ` HOVH ^ « `:

#LI 0RGHO$Q\

^

S!ɋɩɢɫɨɤS!

`

#IRUHDFK YDU UROH LQ 0RGHO

^

GLY FODVV LWHP!

VSDQ FODVV LG!

#UROH ,'

VSDQ!

VSDQ FODVV QDPH!

#UROH 1DPH

VSDQ!

VSDQ FODVV &RGH!

#UROH &RGH

VSDQ!

GLY!

`

Внутри { } находятся теги – это маркер того, что это шаблон. Для простого выполнения кода внутри шаблона используем структуру @{ code }, для корректного вывода данных внутри атрибутов или текстом конструкция — @(string result):

#^

LQW L

`

#IRUHDFK YDU UROH LQ 0RGHO

^

GLY FODVV LWHP # L " RGG !

VSDQ FODVV LG!

#UROH ,'

VSDQ!

VSDQ FODVV QDPH!

#UROH 1DPH

VSDQ!

VSDQ FODVV &RGH!

#UROH &RGH

VSDQ!

GLY!

L

`

Чтобы вывести не теговый текст, нужно использовать псевдотеги WH[W! WH[W!:

#IRUHDFK YDU UROH LQ 0RGHO

^

#UROH 1DPHWH[W!WH[W!

`

Для вывода html­текста – или должна возвращаться MvcHtmlString, или использовать конструкцию Html.Raw(html­string­value), иначе текст будет выведен с экранированием тегов.

PageableData

Рассмотрим постраничный вывод таблицы из БД. Проанализируем:

1.Контроллер должен получить в параметрах значение страницы, которую мы будем выводить

2.По умолчанию это будет первая страница

3.При выводе, мы должны знать:

1.Список элементов БД, которые выводим

2.Количество страниц

3.Текущую страницу

Создадим Generic­класс PageableData (/Models/Info/PageableData.cs):

SXEOLF FODVV 3DJHDEOH'DWD 7!ZKHUH 7 FODVV

^

SURWHFWHG VWDWLF LQW,WHP3HU3DJH'HIDXOW

SXEOLF,(QXPHUDEOH 7! /LVW ^JHW VHW`

SXEOLF LQW3DJH1R ^JHW VHW`

SXEOLF LQW&RXQW3DJH ^JHW VHW`

SXEOLF LQW,WHP3HU3DJH ^JHW VHW`

SXEOLF 3DJHDEOH'DWD,4XHU\DEOH 7! TXHU\DEOH6HWLQWSDJHLQWLWHP3HU3DJH

^

LILWHP3HU3DJH

^

LWHP3HU3DJH ,WHP3HU3DJH'HIDXOW

`

,WHP3HU3DJH LWHP3HU3DJH

3DJH1R SDJH

YDUFRXQW TXHU\DEOH6HW &RXQW

&RXQW3DJH LQW GHFLPDO5HPDLQGHU FRXQW LWHP3HU3DJH " FRXQW LWHP3HU3DJH F RXQW LWHP3HU3DJH

/LVW TXHU\DEOH6HW 6NLS 3DJH1R LWHP3HU3DJH 7DNH LWHP3HU3DJH

`

`

По умолчанию количество выводимых значений на странице – 20, но мы можем изменить этот параметр в конструкторе. Передаем IQueryable и вычисляем кол­во страниц CountPage. Используя PageNo, выбираем страницу:

/LVW TXHU\DEOH6HW 6NLS 3DJH1R LWHP3HU3DJH 7DNH LWHP3HU3DJH

В контроллере используем:

SXEOLF FODVV 8VHU&RQWUROOHU 'HIDXOW&RQWUROOHU

^

SXEOLF $FWLRQ5HVXOW,QGH[ LQWSDJH

^

YDUGDWD QHZ3DJHDEOH'DWD 8VHU! 5HSRVLWRU\ 8VHUV SDJH

UHWXUQ9LHZ GDWD

`

«

Во View используем данный класс:

#PRGHO /HVVRQ3URMHFW 0RGHOV ,QIR 3DJHDEOH'DWD/HVVRQ3URMHFW 0RGHO 8VHU!

#^

9LHZ%DJ 7LWOH 8VHUV

/D\RXW a$UHDV 'HIDXOW 9LHZV 6KDUHG B/D\RXW FVKWPO

`

K!8VHUVK!

S!

#IRUHDFK YDU XVHU LQ 0RGHO /LVW

^

GLY FODVV LWHP!

VSDQ FODVV LG!

#XVHU ,'

VSDQ!

VSDQ FODVV HPDLO!

#XVHU (PDLO

VSDQ!

VSDQ FODVV DFWLYDWH'DWH!

#XVHU$GGHG'DWH

VSDQ!

GLY!

`

S!

Запускаем, проверяем (http://localhost/User)

Для продолжения, сгенерируем больше данных (просто ctrl­c, ctrl­v в таблице в Server Explorer)

Перейдем к созданию Helper’а пагинатора, который даст нам возможность пролистывать этот список.

Helper (PagerHelper)

Так как мы используем bootstrap, то и на базе него будем делать пагинатор. В коде он выглядит так:

GLY FODVV SDJLQDWLRQ!

XO!

OL!D KUHI !3UHYD!OL!

OL!D KUHI !D!OL!

OL!D KUHI !D!OL!

OL!D KUHI !D!OL!

OL!D KUHI !D!OL!

OL!D KUHI !D!OL!

OL!D KUHI !1H[WD!OL!

XO!

GLY!

Нас интересует только внутренняя часть XO! XO!.

Helper создается как Extension для класса System.Web.Mvc.HtmlHelper. План таков:

Вывести Prev (сделать активным если надо)

Вывести ссылки на первые три страницы 1, 2, 3

Вывести троеточие, если необходимо

Вывести активной ссылку текущей страницы

Вывести троеточие, если необходимо

Вывести последние три страницы

Вывести Next (сделать активной если надо) Заключить всё в ul и вывести как MvcHtmlString

Код будет выглядеть так:

SXEOLF VWDWLF0YF+WPO6WULQJ3DJH/LQNV WKLV+WPO+HOSHU KWPOLQWFXUUHQW3DJHLQWWRWDO3DJHV )XQ FLQW VWULQJ! SDJH8UO

^

6WULQJ%XLOGHU EXLOGHU QHZ6WULQJ%XLOGHU

3UHY

YDUSUHY%XLOGHU QHZ7DJ%XLOGHUD

SUHY%XLOGHU ,QQHU+WPO ©

LIFXUUHQW3DJH

^

SUHY%XLOGHU 0HUJH$WWULEXWHKUHI

EXLOGHU$SSHQG/LQHOL FODVV ? DFWLYH? !SUHY%XLOGHU 7R6WULQJOL!

`

HOVH

^

SUHY%XLOGHU 0HUJH$WWULEXWHKUHISDJH8UO ,QYRNH FXUUHQW3DJH

EXLOGHU$SSHQG/LQHOL!SUHY%XLOGHU 7R6WULQJOL!

`

ɉɨ ɩɨɪɹɞɤɭ

IRU LQWL L WRWDO3DJHV L

^

ɍɫɥɨɜɢɟ ɱɬɨ ɜɵɜɨɞɢɦ ɬɨɥɶɤɨ ɧɟɨɛɯɨɞɢɦɵɟ ɧɨɦɟɪɚ

LIL __L ! WRWDO3DJHV __L ! FXUUHQW3DJH L FXU UHQW3DJH

^

YDUVXE%XLOGHU QHZ7DJ%XLOGHUD

VXE%XLOGHU ,QQHU+WPO L 7R6WULQJ &XOWXUH,QIR ,QYDULDQW&XOWXUH

LIL FXUUHQW3DJH

^

VXE%XLOGHU 0HUJH$WWULEXWHKUHI

EXLOGHU$SSHQG/LQHOL FODVV ? DFWLYH? !VXE%XLOGHU 7R6WULQJO L!

`

HOVH

^

VXE%XLOGHU 0HUJH$WWULEXWHKUHISDJH8UO ,QYRNH L

EXLOGHU$SSHQG/LQHOL!VXE%XLOGHU 7R6WULQJOL!

`

`

HOVH LIL FXUUHQW3DJH !

^

Ɍɪɨɟɬɨɱɢɟ ɩɟɪɜɨɟ

EXLOGHU$SSHQG/LQHOL FODVV ? GLVDEOHG? ! D KUHI ? ? ! D! OL!

`

HOVH LIL WRWDO3DJHV FXUUHQW3DJH WRWDO3DJHV

^

Ɍɪɨɟɬɨɱɢɟ ɜɬɨɪɨɟ

EXLOGHU$SSHQG/LQHOL FODVV ? GLVDEOHG? ! D KUHI ? ? ! D! OL!

`

`

1H[W

YDUQH[W%XLOGHU QHZ7DJ%XLOGHUD

QH[W%XLOGHU ,QQHU+WPO ª

LIFXUUHQW3DJH WRWDO3DJHV

^

QH[W%XLOGHU 0HUJH$WWULEXWHKUHI

EXLOGHU$SSHQG/LQHOL FODVV ? DFWLYH? !QH[W%XLOGHU 7R6WULQJOL!

`

HOVH

^

QH[W%XLOGHU 0HUJH$WWULEXWHKUHISDJH8UO ,QYRNH FXUUHQW3DJH

EXLOGHU$SSHQG/LQHOL!QH[W%XLOGHU 7R6WULQJOL!

`

UHWXUQ QHZ0YF+WPO6WULQJXO!EXLOGHU 7R6WULQJXO!

`

Добавим namespace LessonProject.Helper в объявления во View. Это можно сделать двумя

способами:

В самом View

#XVLQJ /HVVRQ3URMHFW +HOSHU

В Web.config (рекомендуется)

FRQILJ6HFWLRQV!

«

VHFWLRQ*URXS QDPH V\VWHP ZHE ZHE3DJHV UD]RU W\SH 6\VWHP :HE :HE3DJHV 5D]RU &RQILJXUDWLR Q 5D]RU:HE6HFWLRQ*URXS 6\VWHP :HE :HE3DJHV 5D]RU 9HUVLRQ &XOWXUH QHXWUDO 3XEOLF

.H\7RNHQ %)$' (!

VHFWLRQ QDPH KRVW W\SH 6\VWHP :HE :HE3DJHV 5D]RU &RQILJXUDWLRQ +RVW6HFWLRQ 6\VWH P :HE :HE3DJHV 5D]RU 9HUVLRQ &XOWXUH QHXWUDO 3XEOLF.H\7RNHQ %)$' ( UH TXLUH3HUPLVVLRQ IDOVH!

VHFWLRQ QDPH SDJHV W\SH 6\VWHP :HE :HE3DJHV 5D]RU &RQILJXUDWLRQ 5D]RU3DJHV6HFWLR Q 6\VWHP :HE :HE3DJHV 5D]RU 9HUVLRQ &XOWXUH QHXWUDO 3XEOLF.H\7RNHQ %)$' ( UHTXLUH3HUPLVVLRQ IDOVH!

VHFWLRQ*URXS!

FRQILJ6HFWLRQV!

V\VWHP ZHE ZHE3DJHV UD]RU!

SDJHV SDJH%DVH7\SH 6\VWHP :HE 0YF :HE9LHZ3DJH!

QDPHVSDFHV!

DGG QDPHVSDFH /HVVRQ3URMHFW +HOSHU!

QDPHVSDFHV!

SDJHV!V\VWHP ZHE ZHE3DJHV UD]RU!

Добавляем пагинатор во View:

GLY FODVV SDJLQDWLRQ!

#+WPO 3DJH/LQNV 0RGHO 3DJH1R 0RGHO &RXQW3DJH [ ! 8UO$FWLRQ ,QGH[ QHZ ^SDJH [`

GLY!

Обратите внимание на конструкцию

[ ! 8UO$FWLRQ ,QGH[ QHZ ^SDJH [`

Это делегат, который возвращает ссылку на страницу. А Url.Action() – формирует ссылку на страницу /User/Index с параметром page = x.

Вот что получилось (уменьшил количество вывода на странице до 5, чтобы образовалось больше страниц):

SearchEngine

Следующим шагом к просмотру данных будет создание поиска. Поиск будет простой, по совпадению подстроки в одном из полей данных. Входной параметр – searchString.

SXEOLF $FWLRQ5HVXOW,QGH[ LQWSDJH VWULQJVHDUFK6WULQJ QXOO

^

LI VWULQJ,V1XOO2U:KLWH6SDFH VHDUFK6WULQJ

^

ɬɭɬ ɉɨɢɫɤ

UHWXUQ9LHZ GDWD

`

HOVH

^

YDUGDWD QHZ3DJHDEOH'DWD 8VHU! 5HSRVLWRU\ 8VHUV SDJH

UHWXUQ9LHZ GDWD

`

`

Создадим класс 6HDUFK(QJLQH, который принимает значения,4XHU\DEOH 8VHU!, и строку поиска,

а возвращает данные по поиску (/Global/SearchEngine.cs):

Первым делом, создадим классы по очистке строки запроса, никаких тегов и убираем разделители типа [,], {,}, (,):

VXPPDU\!

7KH UHJH[ VWULS KWPO

VXPPDU\!

SULYDWH VWDWLF UHDGRQO\5HJH[ 5HJH[6WULS+WPO QHZ5HJH[>A!@ !5HJH[2SWLRQV &RPSLOH

G

SULYDWH VWDWLF VWULQJ 6WULS+WPO VWULQJKWPO

^

UHWXUQ VWULQJ,V1XOO2U:KLWH6SDFH KWPO "VWULQJ(PSW\

5HJH[6WULS+WPO 5HSODFH KWPOVWULQJ(PSW\ 7ULP

`

SULYDWH VWDWLF VWULQJ &OHDQ&RQWHQW VWULQJFRQWHQWERROUHPRYH+WPO

^

LIUHPRYH+WPO

^

FRQWHQW 6WULS+WPO FRQWHQW

`

FRQWHQW

FRQWHQW 5HSODFH?? VWULQJ(PSW\

5HSODFH _ VWULQJ(PSW\

5HSODFH VWULQJ(PSW\

5HSODFH VWULQJ(PSW\

5HSODFH> VWULQJ(PSW\

5HSODFH@ VWULQJ(PSW\

5HSODFH VWULQJ(PSW\

5HSODFH" VWULQJ(PSW\

5HSODFH` VWULQJ(PSW\

5HSODFH^ VWULQJ(PSW\

5HSODFHA VWULQJ(PSW\

5HSODFH VWULQJ(PSW\

YDUZRUGV FRQWHQW 6SOLWQHZ>@ ^ ?Q ?U` 6WULQJ6SOLW2SWLRQV 5HPRYH(PSW\(Q WULHV

YDUVE QHZ6WULQJ%XLOGHU

IRUHDFK YDUZRUGLQ

ZRUGV 6HOHFW W ! W 7R/RZHU,QYDULDQW 7ULP :KHUH ZRUG ! ZRUG /HQJWK !

^

VE$SSHQG)RUPDW^ `ZRUG

`

UHWXUQVE 7R6WULQJ

`

Создаем поиск:

SXEOLF VWDWLF,(QXPHUDEOH 8VHU!6HDUFK VWULQJVHDUFK6WULQJ ,4XHU\DEOH 8VHU! VRXUFH

^

YDUWHUP &OHDQ&RQWHQW VHDUFK6WULQJ 7R/RZHU,QYDULDQW 7ULPIDOVH

YDUWHUPV WHUP 6SOLWQHZ>@ ^ ` 6WULQJ6SOLW2SWLRQV 5HPRYH(PSW\(QWULHV

YDUUHJH[ VWULQJ)RUPDW &XOWXUH,QIR ,QYDULDQW&XOWXUH^ ` VWULQJ -RLQ _ WHU

Соседние файлы в папке ASP.NET MVC Урок 1-F