ASP.NET MVC Урок 1-F / ASP.NET MVC Урок C
.pdf`
SURWHFWHG RYHUULGH YRLG ,QLWLDOL]H5HTXHVW&RQWH[W UHTXHVW&RQWH[W
^
&XOWXUH,QIR FL QHZ&XOWXUH,QIRUX
7KUHDG &XUUHQW7KUHDG &XUUHQW&XOWXUH FL
EDVH,QLWLDOL]H UHTXHVW&RQWH[W
`
`
И /Areas/Admin/Controller/HomeController.cs:
>$XWKRUL]H 5ROHV DGPLQ@
SXEOLF FODVV +RPH&RQWUROOHU $GPLQ&RQWUROOHU
^
SXEOLF $FWLRQ5HVXOW,QGH[
^
UHWXUQ9LHZ
`
SXEOLF $FWLRQ5HVXOW$GPLQ0HQX
^
UHWXUQ9LHZ
`
SXEOLF $FWLRQ5HVXOW/DQJ0HQX
^
LI&XUUHQW/DQJ QXOO
^
YDUODQJ UHSRVLWRU\ /DQJXDJHV )LUVW2U'HIDXOW
UHSRVLWRU\ &KDQJH/DQJXDJH FXUUHQW8VHU ODQJ &RGH
`
YDUODQJ3UR[\ QHZ/DQJ$GPLQ9LHZ UHSRVLWRU\ &XUUHQW/DQJ &RGH
UHWXUQ9LHZ ODQJ3UR[\
`
>+WWS3RVW@
SXEOLF $FWLRQ5HVXOW&KDQJH/DQJXDJH VWULQJ6HOHFWHG/DQJ
^
UHSRVLWRU\ &KDQJH/DQJXDJH FXUUHQW8VHU 6HOHFWHG/DQJ
UHWXUQ5HGLUHFWa DGPLQ
`
`
Итак, AdminController выбирает и устанавливает, в каком языке мы сейчас работаем. Если данный язык не установлен, то выбирается первый попавшийся, и в HomeController.cs:LangMenu устанавливается для пользователя. Создадим LangAdminView.cs (/Models/ViewModel/LangAdminView.cs):
SXEOLF FODVV /DQJ$GPLQ9LHZ
^
SULYDWH,5HSRVLWRU\ 5HSRVLWRU\
^
JHW
^
UHWXUQ'HSHQGHQF\5HVROYHU &XUUHQW *HW6HUYLFH ,5HSRVLWRU\!
`
`
SXEOLF VWULQJ6HOHFWHG/DQJ ^JHW VHW`
SXEOLF/LVW 6HOHFW/LVW,WHP! /DQJV ^JHW VHW`
SXEOLF /DQJ$GPLQ9LHZ VWULQJFXUUHQW/DQJ
^
FXUUHQW/DQJ FXUUHQW/DQJ ""
/DQJV QHZ/LVW 6HOHFW/LVW,WHP!
IRUHDFK YDUODQJLQ5HSRVLWRU\ /DQJXDJHV
^
/DQJV$GGQHZ6HOHFW/LVW,WHP
^
6HOHFWHG VWULQJ&RPSDUH FXUUHQW/DQJ ODQJ &RGHWUXH
9DOXH ODQJ &RGH
7H[W ODQJ 1DPH
`
`
`
`
Опишем все View (+jsфайлы): /Areas/Admin/Views/Shared/_Layout.cshtml:
#^
YDU FXUUHQW8VHU /HVVRQ3URMHFW &RQWUROOHUV %DVH&RQWUROOHU 9LHZ&RQWH[W &RQWUROOHU &XUUHQW8
VHU
`
'2&7<3( KWPO!
KWPO!
KHDG!
WLWOH!#9LHZ%DJ 7LWOHWLWOH!
PHWD KWWS HTXLY &RQWHQW 7\SH FRQWHQW WH[W KWPO FKDUVHW 87)!
#6W\OHV 5HQGHU a &RQWHQW FVV MTXHU\XL
#6W\OHV 5HQGHU a &RQWHQW FVV
#5HQGHU6HFWLRQ VW\OHV UHTXLUHG IDOVH
#6FULSWV 5HQGHU a EXQGOHV PRGHUQL]U
KHDG!
ERG\!
GLY FODVV QDYEDU QDYEDU IL[HG WRS!
GLY FODVV QDYEDU LQQHU!
GLY FODVV FRQWDLQHU IOXLG!
GLY FODVV EWQ JURXS SXOO ULJKW!
D FODVV EWQ GURSGRZQ WRJJOH GDWD WRJJOH GURSGRZQ KUHI !L FODVV LFR Q XVHU!
L!
#FXUUHQW8VHU (PDLOVSDQ FODVV FDUHW!VSDQ!
D!
XO FODVV GURSGRZQ PHQX!
OL!D KUHI !ɇɚ ɫɚɣɬD!OL!
OL FODVV GLYLGHU!OL!
OL!D KUHI #8UO$FWLRQ /RJRXW /RJLQ QHZ^DUHD 'HIDXOW` !ȼɵ ɯɨɞD!
OL!
XO!
GLY!
D FODVV EUDQG KUHI #8UO$FWLRQ ,QGH[ +RPH!/HVVRQ3URMHFWD!
GLY!
GLY!
GLY!
GLY FODVV FRQWDLQHU IOXLG!
GLY FODVV URZ IOXLG!
GLY FODVV VSDQ!
GLY FODVV ZHOO VLGHEDU QDY!
XO FODVV QDY QDY OLVW!
#+WPO$FWLRQ /DQJ0HQX +RPH
#+WPO$FWLRQ$GPLQ0HQX +RPH
XO!
GLY!
GLY!
GLY FODVV VSDQ!
#5HQGHU%RG\
GLY!
GLY!
GLY!
#6FULSWV 5HQGHU a EXQGOHV MTXHU\
#6FULSWV 5HQGHU a EXQGOHV MTXHU\XL
#6FULSWV 5HQGHU a EXQGOHV ERRWVWUDS
#6FULSWV 5HQGHU a EXQGOHV FRPPRQ
#6FULSWV 5HQGHU 6FULSWV DGPLQ FRPPRQ MV
#5HQGHU6HFWLRQ VFULSWV UHTXLUHG IDOVH
ERG\!
KWPO!
Index.cshtml (/Areas/Admin/Views/Home/Index.cshtml):
#^
9LHZ%DJ 7LWOH ,QGH[
/D\RXW a$UHDV$GPLQ 9LHZV 6KDUHG B/D\RXW FVKWPO
`
K!ȺɞɦɢɧɤɚK!
$GPLQ0HQX FVKWPO$UHDV$GPLQ 9LHZV +RPH$GPLQ0HQX FVKWPOOL!
#+WPO$FWLRQ/LQN Ƚɥɚɜɧɚɹ ,QGH[ +RPHOL!
OL!
#+WPO$FWLRQ/LQN ɉɨɫɬɵ ,QGH[ 3RVWOL!
LangMenu.cshtml (/Areas/Admin/Views/Home/LangMenu.cshtml):
#PRGHO /HVVRQ3URMHFW 0RGHOV 9LHZ0RGHOV /DQJ$GPLQ9LHZ
OL!
#XVLQJ +WPO %HJLQ)RUP &KDQJH/DQJXDJH +RPH )RUP0HWKRG 3RVW QHZ ^ LG 6HOHFW/DQJ)RUP `
^
#+WPO 'URS'RZQ/LVW 6HOHFWHG/DQJ 0RGHO /DQJV
`
OL!
И обработчик SelectedLang (/Scripts/admin/common.js):
IXQFWLRQ $GPLQ&RPPRQ
^
BWKLV WKLV
WKLVLQLW IXQFWLRQ
^
6HOHFWHG/DQJFKDQJHIXQFWLRQ^
6HOHFW/DQJ)RUPVXEPLW
`
`
`
YDUDGPLQ&RPPRQ QXOO
UHDG\IXQFWLRQ^
DGPLQ&RPPRQ QHZ $GPLQ&RPPRQ
DGPLQ&RPPRQ LQLW
`
Заходим под админом (у меня это chernikov@gmail.com) и переходим на страницу localhost/admin:
Если не удалось зайти и выкинуло на /Login, то проверьте связь UserRole в БД, чтобы текущий пользователь имел роль с кодом “admin”.
Открываем выпадающий список языков. Он и показывает, в каком языке мы в данный момент работаем.
Добавляем контроллер PostController.cs (/Areas/Admin/Controllers/PostController.cs):
SXEOLF FODVV 3RVW&RQWUROOHU $GPLQ&RQWUROOHU
^
SXEOLF $FWLRQ5HVXOW,QGH[ LQWSDJH
^
YDUOLVW 5HSRVLWRU\ 3RVWV 2UGHU%\'HVFHQGLQJ S ! S$GGHG'DWH
YDUGDWD QHZ3DJHDEOH'DWD 3RVW! OLVW SDJH
GDWD /LVW )RU(DFK S ! S &XUUHQW/DQJ &XUUHQW/DQJ ,'
UHWXUQ9LHZ GDWD
`
>+WWS*HW@
SXEOLF $FWLRQ5HVXOW&UHDWH
^
YDUSRVW9LHZ QHZ3RVW9LHZ
^
&XUUHQW/DQJ &XUUHQW/DQJ ,'
`
UHWXUQ9LHZ(GLWSRVW9LHZ
`
>+WWS*HW@
SXEOLF $FWLRQ5HVXOW(GLW LQWLG
^
YDUSRVW 5HSRVLWRU\ 3RVWV )LUVW2U'HIDXOW S ! S ,' LG
LISRVW QXOO
^
SRVW &XUUHQW/DQJ &XUUHQW/DQJ ,'
YDUSRVW9LHZ 3RVW9LHZ 0RGHO0DSSHU 0DS SRVWW\SHRI3RVWW\SHRI3RVW9LHZ
UHWXUQ9LHZ SRVW9LHZ
`
UHWXUQ5HGLUHFW7R1RW)RXQG3DJH
`
>+WWS3RVW@
>9DOLGDWH,QSXWIDOVH@
SXEOLF $FWLRQ5HVXOW(GLW3RVW9LHZ SRVW9LHZ
^
LI0RGHO6WDWH ,V9DOLG
^
YDUSRVW 3RVW 0RGHO0DSSHU 0DS SRVW9LHZW\SHRI3RVW9LHZW\SHRI3RVW
SRVW &XUUHQW/DQJ &XUUHQW/DQJ ,'
LISRVW ,'
^
SRVW 8VHU,' &XUUHQW8VHU ,'
5HSRVLWRU\ &UHDWH3RVW SRVW
`
HOVH
^
5HSRVLWRU\ 8SGDWH3RVW SRVW
`
7HPS'DWD>0HVVDJH@ ɋɨɯɪɚɧɟɧɨ
UHWXUQ5HGLUHFW7R$FWLRQ,QGH[
`
UHWXUQ9LHZ SRVW9LHZ
`
SXEOLF $FWLRQ5HVXOW'HOHWH LQWLG
^
5HSRVLWRU\ 5HPRYH3RVW LG
7HPS'DWD>0HVVDJH@ ɍɞɚɥɟɧ ɩɨɫɬ
UHWXUQ5HGLUHFW7R$FWLRQ,QGH[
`
`
Изменим PageableData, чтобы можно было сделать Foreach (/Models/Info/PageableData.cs):
SXEOLF FODVV 3DJHDEOH'DWD 7!ZKHUH 7 FODVV
^
SURWHFWHG VWDWLF LQW,WHP3HU3DJH'HIDXOW
SXEOLF/LVW 7! /LVW ^JHW VHW`
«
SXEOLF 3DJHDEOH'DWD,4XHU\DEOH 7! TXHU\DEOH6HWLQWSDJHLQWLWHP3HU3DJH
^
«
/LVW TXHU\DEOH6HW 6NLS 3DJH1R LWHP3HU3DJH 7DNH LWHP3HU3DJH 7R/LVW
`
`
Index.cshtml (/Areas/Admin/Views/Post/Index.cshtml):
#PRGHO /HVVRQ3URMHFW 0RGHOV ,QIR 3DJHDEOH'DWD/HVVRQ3URMHFW 0RGHO 3RVW!
#^
9LHZ%DJ 7LWOH ɉɨɫɬɵ
/D\RXW a$UHDV$GPLQ 9LHZV 6KDUHG B/D\RXW FVKWPO
`
K!
ɉɨɫɬɵ
K!
#+WPO$FWLRQ/LQN Ⱦɨɛɚɜɢɬɶ &UHDWH 3RVW QXOO QHZ ^ #FODVV EWQ `WDEOH FODVV WDEOH!
WKHDG!
WU!
WK!
WK!
WK!
ɩɟɪɟɜɨɞ
WK!
WK!
ɇɚɢɦɟɧɨɜɚɧɢɟ
WK!
WK!
WK!
WU!
WKHDG!
#IRUHDFK YDU LWHP LQ 0RGHO /LVW
^
WU!
WG!
#LWHP ,'
WG!
WG!
# LWHP ,V&RUUHFW/DQJ " ɧɭɠɟɧ ɩɟɪɟɜɨɞ
WG!
WG!
#LWHP +HDGHU
WG!
WG!
#+WPO$FWLRQ/LQN ɂɡɦɟɧɢɬɶ (GLW 3RVW QHZ ^ LG LWHP ,' ` QHZ ^ #FODVV EWQ EWQ PLQL `
#+WPO$FWLRQ/LQN ɍɞɚɥɢɬɶ 'HOHWH 3RVW QHZ ^ LG LWHP ,' ` QHZ ^ #FODVV EWQ EWQ PLQL EWQ GDQJHU `
WG!
WU!
`
WDEOH!
При инициализации в ForEach, в каждом объекте уже инициализируются языковые поля. Язык – тот, с которым в данный момент работаем в админке.
View для редактирования тривиальна, так как мы всю работу делаем в Controller, а наш PostView
уже использует языковые настройки. (/Areas/Admin/Views/Post/Edit.cshtml):
#PRGHO /HVVRQ3URMHFW 0RGHOV 9LHZ0RGHOV 3RVW9LHZ
#^
9LHZ%DJ 7LWOH 0RGHO ,' " Ⱦɨɛɚɜɢɬɶ ɩɨɫɬ ɂɡɦɟɧɢɬɶ ɩɨɫɬ
/D\RXW a$UHDV$GPLQ 9LHZV 6KDUHG B/D\RXW FVKWPO
`
K!# 0RGHO ,' " Ⱦɨɛɚɜɢɬɶ ɩɨɫɬ ɂɡɦɟɧɢɬɶ ɩɨɫɬK!S!
S! #XVLQJ +WPO %HJLQ)RUP (GLW 3RVW )RUP0HWKRG 3RVW
^
#+WPO +LGGHQ ,' 0RGHO ,'
ILHOGVHW!
GLY FODVV FRQWURO JURXS!
ODEHO FODVV FRQWURO ODEHO!
# 0RGHO ,V&RUUHFW/DQJ 0RGHO ,' " ɧɭɠɟɧ ɩɟɪɟɜɨɞ
ODEHO!
GLY!
GLY FODVV FRQWURO JURXS!
ODEHO FODVV FRQWURO ODEHO!
ɁɚɝɨɥɨɜɨɤODEHO!
GLY FODVV FRQWUROV!
#+WPO 7H[W%R[ +HDGHU 0RGHO +HDGHU QHZ ^ #FODVV LQSXW [ODUJH `
#+WPO 9DOLGDWLRQ0HVVDJH +HDGHU
GLY!
GLY!
GLY FODVV FRQWURO JURXS!
ODEHO FODVV FRQWURO ODEHO!
8UOODEHO!
GLY FODVV FRQWUROV!
#+WPO 7H[W%R[ 8UO 0RGHO 8UO QHZ ^ #FODVV LQSXW [ODUJH `
#+WPO 9DOLGDWLRQ0HVVDJH 8UO
GLY!
GLY!
GLY FODVV FRQWURO JURXS!
ODEHO FODVV FRQWURO ODEHO!
ɋɨɞɟɪɠɢɦɨɟODEHO!
GLY FODVV FRQWUROV!
#+WPO 7H[W$UHD &RQWHQW 0RGHO &RQWHQW QHZ ^ #FODVV LQSXW [ODUJH `
#+WPO 9DOLGDWLRQ0HVVDJH &RQWHQW
GLY!
GLY!
GLY FODVV IRUP DFWLRQV!
EXWWRQ W\SH VXEPLW FODVV EWQ EWQ SULPDU\!
ɋɨɯɪɚɧɢɬɶEXWWRQ!
#+WPO$FWLRQ/LQN Ɉɬɦɟɧɢɬɶ ,QGH[ QXOO QXOO QHZ ^ #FODVV EWQ `
GLY!
ILHOGVHW!
`
Обратите внимание на подсказку о необходимости перевода. В данном случае, поля уже будут заполнены, и их нужно перевести и сохранить. Таким образом, будет добавлен перевод. Добавляем пару постов и переводим их:
Ок, посты созданы.
Создадим PostController в Default Area и выведем посты (/Areas/Default/Controller/PostController.cs):
SXEOLF FODVV 3RVW&RQWUROOHU 'HIDXOW&RQWUROOHU
^
SXEOLF $FWLRQ5HVXOW,QGH[ LQWSDJH
^
YDUOLVW 5HSRVLWRU\ 3RVWV 2UGHU%\'HVFHQGLQJ S ! S$GGHG'DWH
YDUGDWD QHZ3DJHDEOH'DWD 3RVW! OLVW SDJH
GDWD /LVW )RU(DFK S ! S &XUUHQW/DQJ &XUUHQW/DQJ ,'
UHWXUQ9LHZ GDWD
`
`
Index.cshtml (/Areas/Default/Views/Post/Index.cshtml):
#PRGHO /HVVRQ3URMHFW 0RGHOV ,QIR 3DJHDEOH'DWD/HVVRQ3URMHFW 0RGHO 3RVW!
#^
9LHZ%DJ 7LWOH ,QGH[
/D\RXW a$UHDV 'HIDXOW 9LHZV 6KDUHG B/D\RXW FVKWPO
`
GLY FODVV LWHP! #IRUHDFK YDU SRVW LQ 0RGHO /LVW
^
K!#SRVW +HDGHUK!
S!
#SRVW &RQWHQW 1O7R%U
S!
VSDQ!#SRVW$GGHG'DWH 7R6WULQJ GVSDQ!
`
GLY!
GLY FODVV SDJLQDWLRQ!
#+WPO 3DJH/LQNV 0RGHO 3DJH1R 0RGHO &RXQW3DJH [ ! 8UO$FWLRQ ,QGH[ QHZ ^SDJH [`GLY!