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

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

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

$63 1(7 09& ǻȘȖȒ &RQILJXUDWLRQ Ȑ ȏȈȋȘțȏȒȈ ȜȈȑȓȖȊ

tutorial

ASP*, .NET*

Цель урока. Научиться использовать файл конфигурации Web.config. Application section, создание своих ConfigSection и IConfig. Научиться загружать файлы, использование file­uploader для загрузки файла, последующая обработка файла.

В этом уроке мы рассмотрим работу с конфигурационным файлом Web.config. Это xml­файл и в нем хранятся настройки программы.

Рассмотрим подробнее, из чего состоит этот файл:

configSection. Это секция отвечает за то, какие классы будут обрабатывать далее объявленные секции. Состоит из атрибута name — это тег, далее объявленной секции, и type – к какому классу относится.

connectionStrings. Это секция отвечает за работу с указанием строк инициализаций соединений с базами данных.

appSettings. Секция параметров типа key/value.

system.web, system.webServer. Секции параметров для работы веб­приложения.

runtime. Секция по настройке в режиме выполнения. Определение зависимостей между dll. Остальные секции. Другие секции с параметрами, объявленными в configSection.

IConfig (и реализация).

Аналогично Repository, конфигуратор будем создавать как сервис. Создаем IConfig и Config­

реализацию в папке Global (/Global/Config/IConfig.cs):

SXEOLF LQWHUIDFH ,&RQILJ

^

VWULQJ/DQJ ^JHW`

`

И

SXEOLF FODVV &RQILJ ,&RQILJ

^

SXEOLF VWULQJ/DQJ

^

JHW

^

UHWXUQ UX

`

`

`

Добавляем строку в RegisterServices (/App_Start/NinjectWebCommon.cs):

NHUQHO %LQG ,&RQILJ! 7R &RQILJ! ,Q6LQJOHWRQ6FRSH

И выводим в BaseController:

>,QMHFW@

SXEOLF,&RQILJ &RQILJ ^JHW VHW`

Теперь сделаем в инициализации контроллера переопеределение CultureInfo в потоке

(/Controllers/BaseController.cs):

SURWHFWHG RYHUULGH YRLG ,QLWLDOL]H6\VWHP :HE 5RXWLQJ 5HTXHVW&RQWH[W UHTXHVW&RQWH[W

^

WU\

^

YDUFXOWXUH,QIR QHZ&XOWXUH,QIR &RQILJ /DQJ

7KUHDG &XUUHQW7KUHDG &XUUHQW&XOWXUH FXOWXUH,QIR

7KUHDG &XUUHQW7KUHDG &XUUHQW8,&XOWXUH FXOWXUH,QIR

`

FDWFK([FHSWLRQ H[

^

ORJJHU (UURU&XOWXUH QRW IRXQGH[

`

EDVH,QLWLDOL]H UHTXHVW&RQWH[W

`

И добавим вывод даты в Index.cshtml (/Areas/Default/Views/Home/Index.cshtml):

#'DWH7LPH 1RZ 7R6WULQJ '

Получаем вывод:

И по­настоящему свяжем это с Web.Config. Добавим в Web.config в appSettings строку:

DGG NH\ &XOWXUH YDOXH UX!

В Config.cs (/Global/Config/Config.cs):

SXEOLF VWULQJ/DQJ

^

JHW

^

UHWXUQ&RQILJXUDWLRQ0DQDJHU$SS6HWWLQJV>&XOWXUH@DV VWULQJ

`

`

Запускаем – результат тот же, теперь изменим значение в Web.config на fr:

DGG NH\ &XOWXUH YDOXH IU!

Получаем дату:

PDUGL PDUV

Отлично! Можете попробовать еще с несколькими языками. Список сокращений находится тут http://msdn.microsoft.com/en­us/goglobal/bb896001.aspx

Создание своих типов ConfigSection

В этой части мы рассмотрим создание своих собственных ConfigSection. В этой главе мы реализуем загрузку файлов и создание превью. Нам понадобятся следующие данные: во­первых, зависимость mime­type от расширения, и иконка файлов (для скачивания, например):

расширение

mime­type

большая иконка маленькая иконка

и во­вторых, данные для создания превью:

наименование превью (например, UserAvatarSize)

ширина высота

Оба типа делаются одинаково, так что я распишу только создание одного из них. Пусть это будет IconSize, для создания превью. Первое, что надо сделать — это создать класс, наследуемый

ConfigurationElement (/Global/Config/IconSize.cs):

SXEOLF FODVV ,FRQ6L]H &RQILJXUDWLRQ(OHPHQW

^

>&RQILJXUDWLRQ3URSHUW\QDPH,V5HTXLUHG WUXH,V.H\ WUXH@

SXEOLF VWULQJ1DPH

^

JHW

^

UHWXUQ WKLV>QDPH@DV VWULQJ

`

`

>&RQILJXUDWLRQ3URSHUW\ZLGWK,V5HTXLUHG IDOVH'HIDXOW9DOXH @

SXEOLF LQW:LGWK

^

JHW

^

UHWXUQ LQW WKLV>ZLGWK@

`

`

>&RQILJXUDWLRQ3URSHUW\KHLJKW,V5HTXLUHG IDOVH'HIDXOW9DOXH @

SXEOLF LQW+HLJKW

^

JHW

^

UHWXUQ LQW WKLV>KHLJKW@

`

`

`

Рассмотрим подробнее:

ConfigurationProperty состоит из имени, это имя атрибута в строке

IsRequired – обязательный этот параметр или нет IsKey – является ли ключом (как первичный ключ в БД)

DefaultValue – значение по умолчанию

Следующий шаг – это создание класса коллекции (так как у нас будет множество элементов) и

секции (/Global/Config/IconSize.cs):

SXEOLF FODVV ,FRQ6L]HV&RQILJ6HFWLRQ &RQILJXUDWLRQ6HFWLRQ

^

>&RQILJXUDWLRQ3URSHUW\LFRQ6L]HV@

SXEOLF,FRQ6L]HV&ROOHFWLRQ ,FRQ6L]HV

^

JHW

^

UHWXUQ WKLV>LFRQ6L]HV@DV,FRQ6L]HV&ROOHFWLRQ

`

`

`

SXEOLF FODVV ,FRQ6L]HV&ROOHFWLRQ &RQILJXUDWLRQ(OHPHQW&ROOHFWLRQ

^

SURWHFWHG RYHUULGH&RQILJXUDWLRQ(OHPHQW&UHDWH1HZ(OHPHQW

^

UHWXUQ QHZ,FRQ6L]H

`

SURWHFWHG RYHUULGH REMHFW *HW(OHPHQW.H\&RQILJXUDWLRQ(OHPHQW HOHPHQW

^

UHWXUQ,FRQ6L]H HOHPHQW 1DPH

`

`

В Web.config добавляем:

LFRQ&RQILJ!

LFRQ6L]HV!

DGG QDPH $YDWDU 6L]H ZLGWK KHLJKW !

«

LFRQ6L]HV!LFRQ&RQILJ!

Теперь необходимо объявить класс разбора этой секции в configSection:

VHFWLRQ QDPH LFRQ&RQILJ W\SH /HVVRQ3URMHFW *OREDO &RQILJ ,FRQ6L]HV&RQILJ6HFWLRQ /HVVRQ

3URMHFW!

Обратите внимание, что в описание type необходимо указать имя dll (/HVVRQ3URMHFW), в которой он содержится. Это важно, но будет рассмотрено в unit­тестах.

MailSettings

Создадим одиночный конфиг для настроек по работе с smtp­почтой. Нам понадобятся:

SmtpServer. Имя сервера.

SmtpPort. Порт, обычно 25й.

SmtpUserName. Логин.

SmtpPassword. Пароль.

SmtpReply. Обратный адрес в строке Reply­to.

SmtpUser. Имя пользователя в строке From. EnableSsl. Да/нет, использовать ли работу по Ssl.

Файл (/Global/Config/MailSetting.cs):

SXEOLF FODVV 0DLO6HWWLQJ &RQILJXUDWLRQ6HFWLRQ

^

>&RQILJXUDWLRQ3URSHUW\6PWS6HUYHU,V5HTXLUHG WUXH@

SXEOLF VWULQJ6PWS6HUYHU

^

JHW

^

UHWXUQ WKLV>6PWS6HUYHU@DV VWULQJ

`

VHW

^

WKLV>6PWS6HUYHU@ YDOXH

`

`

>&RQILJXUDWLRQ3URSHUW\6PWS3RUW,V5HTXLUHG IDOVH'HIDXOW9DOXH @

SXEOLF LQW6PWS3RUW

^

JHW

^

UHWXUQ LQW WKLV>6PWS3RUW@

`

VHW

^

WKLV>6PWS3RUW@ YDOXH

`

`

>&RQILJXUDWLRQ3URSHUW\6PWS8VHU1DPH,V5HTXLUHG WUXH@

SXEOLF VWULQJ6PWS8VHU1DPH

^

JHW

^

UHWXUQ WKLV>6PWS8VHU1DPH@DV VWULQJ

`

VHW

^

WKLV>6PWS8VHU1DPH@ YDOXH

`

`

>&RQILJXUDWLRQ3URSHUW\6PWS3DVVZRUG,V5HTXLUHG WUXH@

SXEOLF VWULQJ6PWS3DVVZRUG

^

JHW

^

UHWXUQ WKLV>6PWS3DVVZRUG@DV VWULQJ

`

VHW

^

WKLV>6PWS3DVVZRUG@ YDOXH

`

`

>&RQILJXUDWLRQ3URSHUW\6PWS5HSO\,V5HTXLUHG WUXH@

SXEOLF VWULQJ6PWS5HSO\

^

JHW

^

UHWXUQ WKLV>6PWS5HSO\@DV VWULQJ

`

VHW

^

WKLV>6PWS5HSO\@ YDOXH

`

`

>&RQILJXUDWLRQ3URSHUW\6PWS8VHU,V5HTXLUHG WUXH@

SXEOLF VWULQJ6PWS8VHU

^

JHW

^

UHWXUQ WKLV>6PWS8VHU@DV VWULQJ

`

VHW

^

WKLV>6PWS8VHU@ YDOXH

`

`

>&RQILJXUDWLRQ3URSHUW\(QDEOH6VO,V5HTXLUHG IDOVH'HIDXOW9DOXH IDOVH@

SXEOLF ERRO(QDEOH6VO

^

JHW

^

UHWXUQ ERRO WKLV>(QDEOH6VO@

`

VHW

^

WKLV>(QDEOH6VO@ YDOXH

`

`

`

Добавим в Web.config:

VHFWLRQ QDPH PDLO&RQILJ W\SH /HVVRQ3URMHFW *OREDO &RQILJ 0DLO6HWWLQJ /HVVRQ3URMHFW!

И

PDLO&RQILJ

6PWS6HUYHU VPWS JPDLO FRP

6PWS3RUW

6PWS8VHU1DPH O[QGUSHWURY

6PWS3DVVZRUG

6PWS5HSO\ O[QGUSHWURY#JPDLO FRP

6PWS8VHU WHVW

(QDEOH6VO WUXH!

Добавим все это теперь в IConfig.cs и Сonfig.cs (/Global/Config/IConfig.cs):

SXEOLF LQWHUIDFH ,&RQILJ

^

VWULQJ/DQJ ^JHW`

,4XHU\DEOH ,FRQ6L]H! ,FRQ6L]HV ^JHW`

,4XHU\DEOH 0LPH7\SH! 0LPH7\SHV ^JHW`

0DLO6HWWLQJ 0DLO6HWWLQJ ^JHW`

`

И

SXEOLF,4XHU\DEOH ,FRQ6L]H! ,FRQ6L]HV

^

JHW

^

,FRQ6L]HV&RQILJ6HFWLRQ FRQILJ,QIR ,FRQ6L]HV&RQILJ6HFWLRQ &RQILJXUDWLRQ0DQDJH U *HW6HFWLRQLFRQ&RQILJ

UHWXUQFRQILJ,QIR ,FRQ6L]HV 2I7\SH ,FRQ6L]H!$V4XHU\DEOH ,FRQ6L]H!

`

`

SXEOLF,4XHU\DEOH 0LPH7\SH! 0LPH7\SHV

^

JHW

^

0LPH7\SHV&RQILJ6HFWLRQ FRQILJ,QIR 0LPH7\SHV&RQILJ6HFWLRQ &RQILJXUDWLRQ0DQDJH U *HW6HFWLRQPLPH&RQILJ

UHWXUQFRQILJ,QIR 0LPH7\SHV 2I7\SH 0LPH7\SH!$V4XHU\DEOH 0LPH7\SH!

`

`

SXEOLF0DLO6HWWLQJ 0DLO6HWWLQJ

^

JHW

^

UHWXUQ0DLO6HWWLQJ &RQILJXUDWLRQ0DQDJHU *HW6HFWLRQPDLO&RQILJ

`

`

Мы еще добавим MailTemplates — шаблоны которые нам понадобятся для рассылки email при регистрации, или при напоминании пароля.

Простая загрузка файлов

Сейчас рассмотрим стандартный пример загрузки файла на сервер, и больше никогда не будем пользоваться таким способом. Класс SimpleFileView для взаимодействия

(/Models/Info/SimpleFileView.cs):

SXEOLF FODVV 6LPSOH)LOH9LHZ

^

SXEOLF+WWS3RVWHG)LOH%DVH 8SORDGHG)LOH ^JHW VHW`

`

Обратите внимание на наименование класса для приема файлов. Итак, создадим контроллер

SimpleFileController (/Areas/Default/Controllers/SimpleFileController.cs):

SXEOLF FODVV 6LPSOH)LOH&RQWUROOHU 'HIDXOW&RQWUROOHU

^

>+WWS*HW@

SXEOLF $FWLRQ5HVXOW,QGH[

^

UHWXUQ9LHZQHZ6LPSOH)LOH9LHZ

`

>+WWS3RVW@

SXEOLF $FWLRQ5HVXOW,QGH[6LPSOH)LOH9LHZ VLPSOH)LOH9LHZ

^

UHWXUQ9LHZ VLPSOH)LOH9LHZ

`

`

И добавим View:

#PRGHO /HVVRQ3URMHFW 0RGHOV ,QIR 6LPSOH)LOH9LHZ

#^

9LHZ%DJ 7LWOH ,QGH[

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

`

K!,QGH[K!

#XVLQJ +WPO %HJLQ)RUP ,QGH[ 6LPSOH)LOH )RUP0HWKRG 3RVW QHZ ^HQFW\SH PXOWLSDUW IRUP GDW D #FODVV IRUP KRUL]RQWDO `

^

ILHOGVHW!

GLY FODVV FRQWURO JURXS!

ODEHO FODVV FRQWURO ODEHO IRU (PDLO!

Ɂɚɝɪɭɡɢɬɟ ɮɚɣɥODEHO!

GLY FODVV FRQWUROV!

#+WPO 7H[W%R[ 8SORDGHG)LOH 0RGHO 8SORDGHG)LOH QHZ ^ W\SH ILOH #FODVV LQSXW [ODUJH `

#+WPO 9DOLGDWLRQ0HVVDJH 8SORDGHG)LOH

GLY!

GLY!

GLY FODVV IRUP DFWLRQV!

EXWWRQ W\SH VXEPLW FODVV EWQ EWQ SULPDU\!

8SORDGEXWWRQ!

GLY!

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