Download - Apuntes ASP en Sharp Develop
-
8/15/2019 Apuntes ASP en Sharp Develop
1/47
Diseño y Desarrollo de un sitio web utilizandoASP.NET MVC 4, EF, no!"out#s y $ootstra%& T'A AP()CAC)*N MVC+ )NT'&DCC)*N Todos los sitios web est-n !re!iendo -s r-%ido en estos d/as, y una 0ez 1ue !re!e, es uy di2/!il dees!ribir, or3anizar y antener. A edida 1ue a3re3aos nue0as 2un!ionalidades o desarrollador de un%roye!to, las 3randes a%li!a!iones web !on un diseño de!iente %ueden salir de !ontrol. As/ 1ue la idea deeste art/!ulo es el de diseñar una ar1uite!tura web 1ue debe ser si%le, 2-!ilente !o%rensible %or!ual1uier diseñador web 5%rin!i%iante a interedio6 y los otores de b7s1ueda. Para este art/!ulo 1ueestoy tratando de diseñar un sitio web %ara las %ersonas antener sus datos de !onta!to en l/nea. Sinebar3o, en el 2uturo, la isa a%li!a!i8n %uede ser utilizada %or la 3ran !ounidad en todo el undo!on la 2un!ionalidad y 8dulos añadido. As/, el diseño debe ser 2-!ilente ada%table a n de 9a!er 2renteal 2uturo !re!iiento del ne3o!io. En este art/!ulo 0oy a 9ablar sobre la !rea!i8n y el diseño de la inter2azde usuario 5)6 de tal anera %ara 1ue la inter2az de usuario se %uede se%arar de la l83i!a de ne3o!io, yse %ueden !rear de 2ora inde%endiente %or !ual1uier diseñador : desarrollador. Para esta %arte 0aos a
utilizar ASP.Net MVC, no!"out ;1uery y $ootstra%. -s adelante en este art/!ulo 0aos a dis!utir -ssobre el diseño de bases de datos y la a%li!a!i8n de la l83i!a de ne3o!io utilizando !a%as estru!turadasutilizando S>?, Entity Fraewor", y el !astillo de @indsor %ara la inye!!i8n de de%enden!ias.
(A SEPA'AC)*N DE P'E&CPAC)*N+ &$;ET)V& P')MA')&
El !on!e%to !la0e es el %aso de la ayor %arte o toda la l83i!a. (a l83i!a no deber/a obli3arse a una%-3ina.
-
8/15/2019 Apuntes ASP en Sharp Develop
2/47
S)ETE P'&ECT&S EN NA S&(A S&(C)*N+ ES (& NECESA')&
Es todo a!er!a de su de!isi8n ... ϑ (a %ro%uesta diseñada o2re!er- al3unos de los bene!ios -s
rele0antes, 1ue in!luyen+
• (a se%ara!i8n de Preo!u%a!i8n+ El diseño debe %eritir 1ue las !a%as !laras y denidas si3ni!a
se3re3ar a%li!a!i8n en -reas distintas !uya 2un!ionalidad no se su%er%one. de tal anera 1ue lainter2az de usuariodiseñadores %ueden !on!entrarse en su traba#o sin tener 1ue lidiar !on la l83i!ade ne3o!io 5A%%li!ation.@eb6, y el desarrollador del n7!leo s8lo %uede traba#ar en la l83i!a dene3o!io %rin!i%al 5A%%li!ation.DT& o A%%li!ation.Mana3er6.
• Produ!ti0idad+ Es -s 2-!il %ara a3re3ar nue0as !ara!ter/sti!as al so2tware eGistente, ya 1ue la
estru!tura ya est- en ar!9a, y la ubi!a!i8n %ara !ada nue0a %ieza de !8di3o se !ono!e deanteano, %or lo 1ue !ual1uier %roblea %uede ser 2-!ilente identi!ados y se%arados %ara 9a!er
-
8/15/2019 Apuntes ASP en Sharp Develop
3/47
2rente a la !o%le#idad y al al!anzar los 2a!tores de !alidad de in3enier/a ne!esarios, !oo H Hrobustez, ada%tabilidad, !a%a!idad de anteniiento y reutiliza!i8n.
Ca%a!idad de anteniiento+ Es -s 2-!il antener la a%li!a!i8n, debido a des%e#ar y estru!tura denidadel !8di3o es 0isible y !ono!ido, %or lo 1ue es -s 2-!il en!ontrar los errores y anoal/as, y odi!arlos!on un ries3o /nio.
• Ada%tabilidad+ (as nue0as !ara!ter/sti!as tB!ni!as, un 2rente tan di2erente terina, o la adi!i8n de
un otor de re3las de ne3o!io es -s 2-!il de lo3rar, ya 1ue su ar1uite!tura de so2tware !rea una!lara se%ara!i8n de las %reo!u%a!iones.
'eutiliza!i8n+ (a reutiliza!i8n es otro oti0o de %reo!u%a!i8n en el diseño de !ual1uier a%li!a!i8n, ya 1uees uno de los %rin!i%ales 2a!tores %ara disinuir el !osto total de %ro%iedad, y nuestro diseño debe!onsiderar 9asta 1uB %unto %odeos 0ol0er a utilizar la a%li!a!i8n web !reada y di2erentes !a%as.En la 7ltia se!!i8n de este art/!ulo, 0aos a dis!utir la 2un!ionalidad de !ada !a%a del indi0iduo endetalles.
IE''AM)ENTAS TECN&(&JKA
Para al!anzar la solu!i8n nal, ne!esitaos 9erraientas aba#o : dll+
• Visual Studio =>L=• ASP.NET MVC 4 !on 'azor View En3ine• Entity Fraewor" .>• Castillo de @indsor %or D)• S>?:=>L=• no!"out.#s y #
-
8/15/2019 Apuntes ASP en Sharp Develop
4/47
PANTA((A =+ C'EA' NEV& C&NTACT&
Esta %antalla debe a%are!er una %antalla en blan!o %ara %ro%or!ionar 2un!ionalidad 1ue. =.L El usuariodebe ser !a%az de entrar en su : su %rier nobre, a%ellido y dire!!i8n de !orreo ele!tr8ni!o. =.= suariodebe %oder añadir !ual1uier !antidad de n7eros de telB2ono, 9a3a !li! en A3re3ar n7eros. =. suariodebe %oder 1uitar !ual1uier n7ero de telB2ono. =.4 suario debe %oder añadir !ual1uier n7ero dedire!!iones 9a!iendo !li! en Añadir nue0a dire!!i8n. =. suario debe %oder eliinar !ual1uierdire!!i8n. =.O Ia3a !li! en el bot8n de 3uardar debe 3uardar los datos de !onta!to en la base de datos y elusuario 0ol0er- atr-s en la %-3ina (ista de !onta!tos.=. Ia3a !li! en el bot8n Vol0er al Perl deb/anre3resar al usuario a la %-3ina de !onta!to de lista. bo!eto ini!ial+
-
8/15/2019 Apuntes ASP en Sharp Develop
5/47
PANTA((A + ACTA()QAC)*N DE C&NTACT& ER)STENTE
Esta %antalla debe ostrar la %antalla !on los datos de !onta!to de in2ora!i8n sele!!ionados. .L Elusuario debe ser !a%az de odi!ar su : su %rier nobre, a%ellido y dire!!i8n de !orreo ele!tr8ni!o. .=
El usuario debe %oder odi!ar : borrar : Añadir !ual1uier !antidad de n7eros de telB2ono, 9a3a !li! enA3re3ar n7eros o eliinar enla!e. . El usuario debe %oder odi!ar : borrar : A3re3ar !ual1uiern7ero de dire!!iones 9a!iendo !li! en Añadir nue0a dire!!i8n o eliinar enla!e. .4 Ia3a !li! en el bot8nde 3uardar debe a!tualizar los datos de !onta!to en la base de datos y el usuario 0ol0er- de nue0o en la%-3ina (ista de !onta!tos.. Ia3a !li! en el bot8n Atr-s %ara Perl deb/an re3resar al usuario a la %-3inade !onta!to de lista. $o!eto ini!ial+
-
8/15/2019 Apuntes ASP en Sharp Develop
6/47
PA'TE L+ C'EAC)*N DE AP()CAC)&NES @E$ 5 N&C&T. ;S, ASP.NET MVC $&&TST'AP6+ PA'A D )SEAD&'ES
Antes del sa1ue ini!ial %or %arte de ), 0aos a 0er 1uB bene!ios nos estaos utilizando no!"out#s y$ootstra% #unto !on ASP.NET MVC 4. ¿Por qué Knockoutjs: no!"out es un %atr8n MVVM 1ue traba#a !onun odelo de 0ista #a0as!ri%t. (a raz8n %or la 1ue esto 2un!iona bien !on MVC es 1ue la serializa!i8n 9a!iay desde odelos de #a0as!ri%t en ;S&N es uy si%le, y tabiBn se in!luye !on MVC 4. nos %eritedesarrollar ri!a inter2az de usuario !on u!9o enos !odi!a!i8n y !ada 0ez 1ue odi!aos nuestrosdatos, inediata 'ee#a en la inter2az de usuario. ¿Por Bootstrap: Twitter $ootstra% es un ITM( si%le yeGible, CSS y ;a0as!ri%t %ara los !o%onentes de inter2az de usuario %o%ulares e intera!!iones. Viene !on9a!es de estilos CSS, !o%onentes y %lu3ins ;a0as!ri%t. Pro%or!iona so%orte de %lata2ora !ruzada, lo 1ueeliina las %rin!i%ales in!onsisten!ias de diseño. Todo si%leente 2un!ionaU na buena do!uenta!i8n yel sitio web de Twitter $ootstra% en s/ es una uy buena re2eren!ia %ara e#e%lo de la 0ida real. , %or7ltio, e a9orra un ont8n de 0e!es, ya 1ue redu#o el tie%o de desarrollo a la itad !on uy enos!asi !ero %robleas !on el na0e3ador de %ruebas y. Al3unos otros bene!ios 1ue %odeos obtenerediante el uso de este ar!o son+
• 'e#illa L=Coluna, diseño #o, uido o diseño sensible.• CSS $ase %ara la ti%o3ra2/a, el !8di3o 5el resaltado de sintaGis !on Joo3le %retti2y6, tablas,
2orularios, botones y utiliza i!onos %or Jl%y9i!ons.
-
8/15/2019 Apuntes ASP en Sharp Develop
7/47
• Co%onentes @eb de inter2az de usuario, !oo botones, en7s de na0e3a!i8n, Eti1uetas,
Miniaturas, Alertas, barras de %ro3reso y is!el-neos.• Plu3ins ;a0as!ri%t %ara Modal, des%le3able, S!rolls%y, Tab, Toolti%, Po%o0er, Alerta, $utton, Colla%se
Carousel y Ty%e9ead.
En los %asos si3uientes, 0aos a traba#ar a tra0Bs de la distribu!i8n y el diseño %ara !onstruir la inter2azde usuario %ara el re1uisito anterior utilizando datos !ti!ios #a0as!ri%t.
PAS& L+
Crear un nue0o %roye!to !oo solu!i8n en blan!o el nobre !oo A%li!a!i8n
PAS& =+
Ia3a !li! en la !ar%eta de la solu!i8n y A3re3ar nue0o %roye!to de ti%o ASP.NET MVC 4 !oo %lantillas dea%li!a!iones de )nternet !on 0istas al otor !oo 'azor. Des%uBs del %aso = la estru!tura del %roye!todebe ser siilar a la ia3en de aba#o
-
8/15/2019 Apuntes ASP en Sharp Develop
8/47
-
8/15/2019 Apuntes ASP en Sharp Develop
9/47
PAS& +
Ia3a !li! dere!9o sobre re2eren!ias y 9a3a !li! en Adinistrar %a1uetes NuJet. Es!riba $ootstra% en labarra de b7s1ueda a !ontinua!i8n, 9a3a !li! en el bot8n )nstalar.
PAS& 4+
-
8/15/2019 Apuntes ASP en Sharp Develop
10/47
añadir deba#o de la l/nea de !8di3o en el ar!9i0o en la !ar%eta $undleCon3.!s A%%WStart añadirno!"out#s y $ootstra% %ara !ada %-3ina
bundles.Add (nuevo ScriptBundle ("~ / paquetes / knockout"). Incluir (
"~ / scripts / knockout- {version} .s"))!
bundles.Add (nuevo StleBundle ("~ / #ontent / css") Inclua ("~ / #ontent /
bootstrap.css").)!
TabiBn en W(ayout, ar!9i0o !s9tl en Vistas : !ar%eta !o%artida a3re3ar deba#o de la l/nea %arare3istrar ar!9i0os "no!"out !oo+
$ Scripts.%ender ("~ / paquetes / knockout")
PAS& +
Añadir un nue0o nobre de la !ar%eta !oo !onta!to dentro Vistas y, a !ontinua!i8n añadir )ndeG.!s9tl!oo nue0o Ver %-3ina. A !ontinua!i8n, a3re3ue un nue0o nobre de !ontrolador 1ueConta!tController.!s dentro de la !ar%eta del !ontrolador, y añadir un nue0o ar!9i0o en la !ar%eta S!ri%tsConta!t.#s. Consulte a !ontinua!i8n la ia3en.
-
8/15/2019 Apuntes ASP en Sharp Develop
11/47
PAS& O+
Finalente odi!ar el a%a de rutas %or de2e!to en 'oute.!on3 señalar !onta!tar !ontrolador !oo+
routes.&ap%oute (
no'bre "e*ault"+
url "{controlador} / {acci,n} / {id}"+
predeter'inados nuevo controlador {"#ontacto"+ action "ndice"+ id rl0ara'eter.1ptional}
)!
tabiBn odi!ar el ar!9i0o W(ayout.!s9tl interior Vista : S9ared se37n la sintaGis $ootStra%. A!ontinua!i8n se uestra el !8di3o odi!ado+
23 1#4506 7t'l8
29t'l lan: "es"8
29ead8
-
8/15/2019 Apuntes ASP en Sharp Develop
12/47
2&eta c7arset "4;-
-
8/15/2019 Apuntes ASP en Sharp Develop
13/47
PAS& ?+
En %rier lu3ar 0aos a !rear un dato de %erl !ti!ias !oo atriz en Conta!t.#s 5-s tarde 0aos a
bus!arla a la base de datos6, y lue3o 0aos a utilizar estos datos %ara rellenar la !uadr/!ula.
var u''0ro*ile H
{
"0ro*ileI" +
"Fo'bre" "Anand"+
"Apellido" "0ande"+
"#orreo electr,nico" "anand$anandpande.co'"
}+
{
"0ro*ileI" J+
"Fo'bre" "Kuan"+
"Apellido" "#ena"+
"#orreo electr,nico" "o7n$cena.co'"
}
L
A !ontinua!i8n, 0aos a !rear ProlesViewModel, una !lase de odelo de 0ista 1ue antienen %erles, unarre3lo 1ue !ontiene una !ole!!i8n ini!ial de datos DuyProle. Ten3a en !uenta 1ue se trata de un"o.obser0ableArray, y es el e1ui0alente obser0able de una serie re3ular, lo 1ue si3ni!a 1ue %uede
dis%arar auto-ti!aente las a!tualiza!iones de la inter2az de usuario !ada 0ez 1ue se a3re3an oeliinan eleentos. %or 7ltio teneos 1ue a!ti0ar no!"out utilizando "o.a%%ly$indin3s 56.
var 0ro*iles=ie>&odel *unction () {
var sel* esto!
var re*res7 *unction () {
sel*.0ro*iles (u''0ro*ile)!
-
8/15/2019 Apuntes ASP en Sharp Develop
14/47
}!
// propiedades de datos pMblica
sel*.0ro*iles ko.observableArra (HL)!
re*res7 ()!
}!
ko.applBindin:s (nuevo 0ro*iles=ie>&odel ())!
PAS& X+
A !ontinua!i8n 0aos a es!ribir !8di3o en la %-3ina )ndeG.!s9tl, 1ue se su%one 1ue ostrar la (ista de%erles.Teneos 1ue utilizar la uni8n de YtbodyZ eleento 2orea!9, %or lo 1ue 0a a 9a!er una !o%ia desus eleentos se!undarios %ara !ada entrada de la atriz de %erles, y lue3o %oblar 1ue YtbodyZ !onal3unas ar!as de de!ir 1ue 1uieres una esa la 5YtrZ6 %ara !ada entrada.
24able class "raas de tabla tabla tabla de borde de tabla condensada"8
24r8
2478 Fo'bre 2/ t78
2478 Apellido 2/ t78
2478 6'ail 2/ t78
2/ 4r8
24bod datos-bind "*oreac7 0er*iles"8
24r "8
24d datos-bind "te@t Fo'bre"8 2/ td8
24d datos-bind "te@t Apellido"8 2/ td8
24d datos-bind "te@t 6'ail"8 2/ td8
2/ 4r8
2/ 4bod8
2/ 4able8
2Script src "~ / Scripts / #ontact.s"8 2/ script8
Si e#e!uta la a%li!a!i8n a9ora, deber/a 0er una tabla si%le de la in2ora!i8n del %erl !oo+ 'e!ordar%ara el estilo de tabla 1ue estaos usando la !lase !ss de Manos a la &bra. En el e#e%lo anterior, es
-
8/15/2019 Apuntes ASP en Sharp Develop
15/47
24able class "raas de tabla tabla tabla de borde de tabla condensada"8
PAS& L>+
A9ora teneos 1ue añadir Editar y Eliinar la 2un!ionalidad %ara !ada la, y un bot8n -s en la %artesu%erior %ara !rear un nue0o %erl. As/ 1ue 0aos a 9a!er+
• Añadir uno -s Yt9Z y YtdZ en nuestra %lantilla de la tabla y se unen es !li!" e0ento !on 2un!i8nreo0eProle en #s.
• Modi!ar la Nobre añadir enla!e %ara Editar Perl y lue3o unirse a su e0ento !li!" !on 2un!i8n
EditProle.• A3re3ar un bot8n %ara Crear nue0o %erl y enlazarlo !on un !li! del e0ento usando la 2un!i8n
!reateProle.As/ !8di3o nal 9a!ia 2uera %ara )ndeG.!s9tl es+
2Input tpe clase "bot,n" "btn btn btn-pequeGo-pri'aria" value "nuevo contacto"
bind-data "click N root.create0ro*ile" /8
29r /8
24able class "raas de tabla tabla tabla de borde de tabla condensada"8
24r8
2478 Fo'bre 2/ t78
2478 Apellido 2/ t78
2478 6'ail 2/ t78
2478 2/ t78
2/ 4r8
24bod datos-bind "*oreac7 0er*iles"8
24r8
24d class "no'bre"8 2a datos bind"te@t ;irstFa'e+ click
Nparent.edit0ro*ile"8 2/a8 2/ td8
24d datos-bind "te@t Apellido"8 2/ td8
24d datos-bind "te@t 6'ail"8 2/ td8
24d8 2bot,n class "btn 'ini-btn btn-peli:ro" bind-data "7a:a clic en N
parent.re'ove0ro*ile"8 quitar 2/ button8 2/ td8
2/ 4r8
2/ 4bod8
2/ 4able8
2Script src "~ / Scripts / #ontact.s"8 2/ script8
la salida es+ Nin3uno del bot8n a3re3ado y enla!e 2un!ionar-, %or1ue no 9eos es!rito nin37n !8di3o%ara eso, as/ 1ue 0aos a arre3lar eso en el %r8Gio %aso.
-
8/15/2019 Apuntes ASP en Sharp Develop
16/47
PAS& LL+
Añadir e0entos %ara !reateProle, EditProle y reo0eProle en Conta!t.#s
sel*.create0ro*ile *unction () {
alert ("#rear un nuevo per*il")!
}!
sel*.edit0ro*ile *unction (per*il) {
("per*il tis 6ditar con id per*il co'o" O pro*ile.0ro*ileId) alerta!
}!
sel*.re'ove0ro*ile *unction (per*il) {
i* (con*ir' ("P6stCs se:uro que quieres borrar este per*ilQ")) {
sel*.0ro*iles.re'ove (per*il)!
}
}!
A9ora !uando e#e!utaos nuestra a%li!a!i8n y 9a3a !li! en el bot8n Eliinar, a !ontinua!i8n, se eliinar-ese %erl de la atriz a!tual. Coo denios esta atriz !oo obser0able, la inter2az de usuario seantendr- en sinton/a !on los !abios en la atriz. PruBbalo 9a!iendo !li! en el bot8n
-
8/15/2019 Apuntes ASP en Sharp Develop
17/47
pMblica Action%esult #reate6dit ()
{
volver =er ()!
}
• n nue0o ar!9i0o #s nobrado !oo CreateEdit.#s dentro de la !ar%eta S!ri%ts.• Modi!ar !reateProle y EditProle Btodo de Conta!t.#s, %or lo 1ue a%untar- a la %-3ina
CreateEdit.
sel*.create0ro*ile *unction () {
>indo>.location.7re* R/ #ontacto / #reate6dit / R!
}!
sel*.edit0ro*ile *unction (per*il) {
>indo>.location.7re* R/ #ontacto / #reate6dit /R O pro*ile.0ro*ileId!
}!
E#e!u!i8n de la a%li!a!i8n a9ora 0a a traba#ar %ara todos los e0entos en la lista de !onta!tos 5L
%antalla6. !rear y editar debe rediri3ir a la %-3ina CreateEdit !on los %ar-etros re1ueridos.
PAS& L+
En %rier lu3ar 0aos a e%ezar !on la adi!i8n de in2ora!i8n del %erl a esta %-3ina CreateEdit. Por 1ueteneos 1ue 9a!er+ Teneos 1ue lle3ar Prole)D de url es as/, añadir %or deba#o de dos l/neas en la %artesu%erior de la %-3ina CreateEdit.#s
var url >indo>.location.pat7na'e!
var 0ro*ileI url.substrin: (url.lastInde@1* (R/R) O )!
e*inir un 'aniquT de per*il co'o 'atri en #reate6dit.s
#ontraer U #opiar c,di:o
var u''0ro*ile H
{
"0ro*ileI" +
"Fo'bre" "Anand"+
"Apellido" "0ande"+
"#orreo electr,nico" "anand$anandpande.co'" }+
{
"0ro*ileI" J+
"Fo'bre" "Kuan"+
"Apellido" "#ena"+
"#orreo electr,nico" "o7n$cena.co'"
}
L
-
8/15/2019 Apuntes ASP en Sharp Develop
18/47
Perl, un si%le !onstru!tor de la !lase ;a0aS!ri%t 1ue ala!ena FirstNae de un %erl, A%ellido y Correosele!!i8n.
var 0er*il *unction (per*il) {
var sel* esto!
sel*.0ro*ileId ko.observable (per*il pro*ile.0ro*ileId )!
sel*.;irstFa'e ko.observable (per*il pro*ile.;irstFa'e RQR)!
sel*.?astFa'e ko.observable (per*il pro*ile.?astFa'e RQR)!
sel*.6'ail ko.observable (per*il pro*ile.6'ail RQR)!
}!
ProleColle!tion, una !lase de odelo de 0ista 1ue tiene el %erl 5un ob#eto ;a0aS!ri%t 1ue %ro%or!ionadatos de %erl6, #unto !on la uni8n de los e0entos sa0eProle y ba!"ToProle(ist.
var 0ro*ile#ollection *unction () {
var sel* esto!
// Si 0ro*ileI es + Si:ni*ica #rear nuevo per*il
i* (0ro*ileI ) {
sel*.pro*ile ko.observable (nuevo per*il ())!
}
else {
var currentpro*ile N .:rep (u''0ro*ile+ *unci,n (e) {return e.0ro*ileId
0ro*ileI!})!
sel*.pro*ile ko.observable (nuevo per*il (currentpro*ile HL))! }
sel*.back4o0ro*ile?ist *unction () {>indo>.location.7re* R/ contactoR! }!
sel*.save0ro*ile *unction () {
alert (";ec7a de a7orrar es" O KS1F.strin:i* (ko.toKS (sel*.pro*ile ())))!
}!
}!
nalente, a!ti0ar no!"out utilizando "o.a%%ly$indin3s 56.
ko.applBindin:s (nuevo 0ro*ile#ollection ())!
PAS& L4+
A !ontinua!i8n 0aos a es!ribir !8di3o en la %-3ina CreateEdit.!s9tl, 1ue se su%one %ara ostrar lain2ora!i8n del %erl. Teneos 1ue utilizar el !on la uni8n de los datos del %erl, %or lo 1ue 0a a 9a!er
-
8/15/2019 Apuntes ASP en Sharp Develop
19/47
una !o%ia de sus eleentos se!undarios %ara un %erl deterinado y, a !ontinua!i8n, asi3nar los 0aloresa%ro%iados.El !8di3o %ara CreateEdit.!s9tl es la si3uiente+
24able class "tabla"8
24r8
247 colspan ""8 In*or'aci,n del per*il 2/ t78
2/ 4r8
24r8 2/ tr8
24bod datos-bind Rcon per*il8
24r8
24d8
2Input class -bind datos "entrada :rande" "valor no'bre R'arcador de
posici,n " Fo'bre "/8
2/ 4d8
24d8
2Input class -bind datos "entrada :rande" "valor Apellido R'arcador de
posici,n " Apellido "/8
2/ 4d8 24d8
2Input class -bind datos "entrada :rande" "valor 6'ail R'arcador de
posici,n " 6'ail "/8
2/ 4d8
2/ 4r8
2/ 4bod8
2/ 4able8
2#lase button "btn btn btn-pequeGo D@ito" bind-data Rclick save0ro*ileR8 Vuardar
per*il 2/ button8
2Input class "btn btn btn-pequeGo-pri'aria" tpe "button" value "=olver al 0er*il?ista" bind-data "click N root.back4o0ro*ile?ist" /8
2Script src "~ / scripts / #reate6dit.s"8 2/ script8
E#e!u!i8n de la a%li!a!i8n ostrar- las si3uientes %antallas+ Para !rear Nue0o+ Para re3istro eGistente !onel %erl )d L+ A!tualiza!i8n de !ual1uier re3istro eGistente y 9a3a !li! en 3uardar !on dar salida a!ontinua!i8n+ Se37n el re1uisito de esta %antalla, ya lo 9eos 9e!9o+ =.L El usuario debe ser !a%az deentrar en su : su Nobre, A%ellido y Dire!!i8n de !orreo ele!tr8ni!o =.O Ia3a !li! en el bot8n de 3uardardebe 3uardar los datos de !onta!to en la base de datos y el usuario 0ol0er- de nue0o en la %-3ina (ista de!onta!tos. =. Ia3a !li! en el bot8n Atr-s %ara Perl deb/an re3resar al usuario a la lista de !onta!tos .
%-3ina En si3uiente %aso 0aos a tratar de !onse3uir a !ontinua!i8n re1uisito+ =.= El usuario debe %oderañadir !ual1uier !antidad de n7eros de telB2ono, 9a3a !li! en A3re3ar n7eros. =. El usuario debe%oder 1uitar !ual1uier n7ero de telB2ono
-
8/15/2019 Apuntes ASP en Sharp Develop
20/47
-
8/15/2019 Apuntes ASP en Sharp Develop
21/47
PAS& L+
Para al!anzar el re1uisito no. =.= y =., teneos 1ue 9a!er+ Denir un P9oneTy%e ani1u/ y datosP9oneDT& !oo una atriz en CreateEdit.#s. %9oneTy%eData se utiliza %ara enlazar des%le3able %aradenir el ti%o de telB2ono %ara un n7ero de telB2ono %arti!ular.
var p7one4peata H
{
"07one4peId" +
"Fo'bre" "4elD*ono del trabao"
}+
{
"07one4peId" J+
"Fo'bre" "4u Fo'bre"
}
L!
var 07one41 H
{
"07oneId" +
"07one4peId" +
"0ro*ileI" +
"FM'ero" "-JJJ-"
}+
{
"07oneId" J+
"07one4peId" J+
"0ro*ileI" +
"FM'ero" "WWW-XXX-YYYY"
}
L!
Perl, un si%le !onstru!tor de la !lase de ;a0aS!ri%t 1ue ala!ena una in2ora!i8n de l/nea tele28ni!a1ue in!luye el ti%o de telB2ono es de!ir, si su telB2ono del traba#o o P9one Ioe, et!, #unto !on eln7ero de telB2ono.
07oneline var *unction (telD*ono) {
var sel* esto!
sel*.07oneId ko.observable (telD*ono p7one.07oneId )!
sel*.07one4peId ko.observable (telD*ono p7one.07one4peId )!
sel*.Fu'ber ko.observable (telD*ono p7one.Fu'ber RR)!
}!
Modi!ar la !lase 0iewodel ProleColle!tion tabiBn sostiene %9oneNubers #unto !on la uni8n de lose0entos addP9one y reo0eP9one.
-
8/15/2019 Apuntes ASP en Sharp Develop
22/47
var 0ro*ile#ollection *unction () {
var sel* esto!
// Si 0ro*ileI es + Si:ni*ica #rear nuevo per*il
i* (0ro*ileI ) {
sel*.pro*ile ko.observable (nuevo per*il ())!
sel*.p7oneFu'bers ko.observableArra (Hnueva lTnea tele*,nica ()L)!
}
else {
var currentpro*ile N .:rep (u''0ro*ile+ *unci,n (e) {return e.0ro*ileId
0ro*ileI!})!
sel*.pro*ile ko.observable (nuevo per*il (currentpro*ile HL))!
var current0ro*ile07one N .:rep (07one41+ *unci,n (e) {return e.0ro*ileId
0ro*ileI!})!
sel*.p7oneFu'bers ko.observableArra (ko.utils.arra&ap (current0ro*ile07one+
*unci,n (telD*ono) {
devolver el telD*ono! }))!
}
sel*.add07one *unction () {
sel*.p7oneFu'bers.pus7 (nueva lTnea tele*,nica ())
}!
sel*.re'ove07one *unction (telD*ono) {sel*.p7oneFu'bers.re'ove (telD*ono)}!
sel*.back4o0ro*ile?ist *unction () {>indo>.location.7re* R/ contactoR! }!
sel*.save0ro*ile *unction () {
alert (";ec7a de a7orrar es" O KS1F.strin:i* (ko.toKS (sel*.pro*ile ())))!
}!
}!
PAS& LO+
A !ontinua!i8n 0aos a añadir una se!!i8n -s 1ue añadir la in2ora!i8n del telB2ono en la %-3inaCreateEdit.!s9tl, 1ue se su%one %ara ostrar la in2ora!i8n del telB2ono. Coo un %erl %uede tener
telB2ono 7lti%le de di2erentes ti%os, Por lo tanto, 0aos a utilizar el 2orea!9 0in!ulante %ara los datos den7eros de telB2ono, %or lo 1ue 0a a 9a!er una !o%ia de sus eleentos se!undarios %ara un %erldeterinado, y lue3o asi3nar los 0alores a%ro%iados. Añadir a !ontinua!i8n la se!!i8n en CreateEdit.!s9t #usto des%uBs )n2ora!i8n Perl y antes en el bot8n Juardar.
24able class "tabla"8
24r8
247 colspan ""8 In*or'aci,n del telD*ono 2/ t78
2/ 4r8
-
8/15/2019 Apuntes ASP en Sharp Develop
23/47
24r8 2/ tr8
2tbod datos-bind R*oreac7 p7oneFu'bersR8
24r8
24d8
2Select-bind data "opciones p7one4peata+ valor 07one4peId+
options=alue R07one4peIdR+ options4e@t RFo'breR+ options#aption RSeleccione 4ipo
4elD*ono ...R"8 2/ select8
2/ 4d8
24d8
2Input class -bind datos "entrada :rande" "value Fu'ber R'arcador de
posici,n " FM'ero "/8
2/ 4d8
24d8
2a class"btn-btn btn pequeGa dan:er" 7re*RZR datos bindR click
Nparent.re'ove07oneR8 [ 2/a8
2/ 4d8
2/ 4r8
2/ 4bod8
2/ 4able8208
2#lase button "btn btn btn pequeGa-pri'aria" bind-data Rclick add07oneR8 AGadir nuevo
telD*ono 2/ button8
2/ 08
A9ora la salida %ara a3re3ar nue0o !onta!to es+ %ara editar !onta!to eGistente es+ As/ 1ue a9ora nos1uedaos s8lo !on el re1uisito de aba#o+ . =.4 suario debe %oder añadir !ual1uier n7ero de dire!!iones9a!iendo !li! en Añadir nue0a dire!!i8n =. El usuario debe %oder eliinar !ual1uier dire!!i8n Paso L+ Elre1uisito no. =.4 y =. son siilares a 3u/a tele28ni!a de la )n2ora!i8n, a !ontinua!i8n es el !8di3o nal%ara CreateEdit.#s y ar!9i0os CreateEdit.!s9tl+ Para CreateEdit.#s
-
8/15/2019 Apuntes ASP en Sharp Develop
24/47
var url >indo>.location.pat7na'e!
var 0ro*ileI url.substrin: (url.lastInde@1* (R/R) O )!
var u''0ro*ile H
{
"0ro*ileI" +
"Fo'bre" "Anand"+
"Apellido" "0ande"+
"#orreo electr,nico" "anand$anandpande.co'"
}+
{ "0ro*ileI" J+
"Fo'bre" "Kuan"+
"Apellido" "#ena"+
"#orreo electr,nico" "o7n$cena.co'"
}
L!
var 07one4peata H
{
"07one4peId" +
-
8/15/2019 Apuntes ASP en Sharp Develop
25/47
-
8/15/2019 Apuntes ASP en Sharp Develop
26/47
"Address?ine" "J 9i:7>a Y"+
"Address?ineJ" "Suite Z J"+
"0aTs" "66.."+
"6stado" "4e@as"+
"#iudad" "9ouston"+
"#,di:o 0ostal" "
-
8/15/2019 Apuntes ASP en Sharp Develop
27/47
else {
// 0ara obtener in*or'aci,n del per*il
var currentpro*ile N .:rep (u''0ro*ile+ *unci,n (e) {return e.0ro*ileId
0ro*ileI!})!
sel*.pro*ile ko.observable (nuevo per*il (currentpro*ile HL))!
// FM'eros de telD*onos
var current0ro*ile07one N .:rep (07one41+ *unci,n (e) {return e.0ro*ileId
0ro*ileI!})!
sel*.p7oneFu'bers ko.observableArra (ko.utils.arra&ap (current0ro*ile07one+
*unci,n (telD*ono) {
devolver el telD*ono!
}))!
0ara // irecci,n
var current0ro*ileAddress N .:rep (Address41+ *unci,n (e) {return e.0ro*ileId
0ro*ileI!})!
sel*.addresses ko.observableArra (ko.utils.arra&ap (current0ro*ileAddress+
*unci,n (direcci,n) {
la direcci,n del re'itente!
}))! }
sel*.add07one *unction () {sel*.p7oneFu'bers.pus7 (nueva lTnea tele*,nica ())}!
sel*.re'ove07one *unction (telD*ono) {sel*.p7oneFu'bers.re'ove (telD*ono)}!
sel*.addAddress *unction () {sel*.addresses.pus7 (nuevo Address?ine ())}!
sel*.re'oveAddress *unction (direcci,n) {sel*.addresses.re'ove (direcci,n)}!
sel*.back4o0ro*ile?ist *unction () {>indo>.location.7re* R/ contactoR! }!
sel*.save0ro*ile *unction () {
sel*.pro*ile () Address41 sel*.addresses.!
sel*.pro*ile () 07one41 sel*.p7oneFu'bers.!
alert (";ec7a de a7orrar es" O KS1F.strin:i* (ko.toKS (sel*.pro*ile ())))!
}!
}!
ko.applBindin:s (nuevo 0ro*ile#ollection ())!
y, %or CreateEdit.!s9tl
24able class "tabla"8
24r8
247 colspan ""8 In*or'aci,n del per*il 2/ t78
2/ 4r8
24r8 2/ tr8
24bod datos-bind Rcon per*il8
24r8
-
8/15/2019 Apuntes ASP en Sharp Develop
28/47
24d8
2Input class -bind datos "entrada :rande" "valor no'bre R'arcador de
posici,n " Fo'bre "/8
2/ 4d8
24d8
2Input class -bind datos "entrada :rande" "valor Apellido R'arcador de
posici,n " Apellido "/8
2/ 4d8
24d8
2Input class -bind datos "entrada :rande" "valor 6'ail R'arcador de
posici,n " 6'ail "/8
2/ 4d8
2/ 4r8
2/ 4bod8
2/ 4able8
24able class "tabla"8
24r8
247 colspan ""8 In*or'aci,n del telD*ono 2/ t78 2/ 4r8
24r8 2/ tr8
2tbod datos-bind R*oreac7 p7oneFu'bersR8
24r8
24d8
2Select-bind data "opciones 07one4peata+ valor 07one4peId+
options=alue R07one4peIdR+ options4e@t RFo'breR+ options#aption RSeleccione 4ipo
4elD*ono ...R"8 2/ select8
2/ 4d8
24d8
2Input class -bind datos "entrada :rande" "value Fu'ber R'arcador deposici,n " FM'ero "/8
2/ 4d8
24d8
2a class"btn-btn btn pequeGa dan:er" 7re*RZR datos bindR click
Nparent.re'ove07oneR8 [ 2/a8
2/ 4d8
2/ 4r8
2/ 4bod8
2/ 4able8
208
2#lase button "btn btn btn pequeGa-pri'aria" bind-data Rclick add07oneR8 AGadir nuevo
telD*ono 2/ button8
2/ 08
29r /8
24able class "tabla"8
24r8 2t7 colspan "X"8 irecci,n de In*or'aci,n 2/ t78 2/ tr8
24bod datos-bind "*oreac7 direcciones"8
24r8
24d colspan "X"8
-
8/15/2019 Apuntes ASP en Sharp Develop
29/47
2Select-bind data "opciones Address4peata+ valor Address4peId+
options=alue RAddress4peIdR+ options4e@t RFo'breR+ options#aption RSeleccione 4ipo de
direcci,n ...R"8 2/ select8
2/ 4d8
2/ 4r8
24r8
24d8
2Input class -bind datos "entrada :rande" "valor Address?ine
R'arcador de posici,n " irecci,n "/8
20 stle "paddin:-top Xp@!"8 2input class -bind datos "entrada :rande"
"valor 6stado R'arcador de posici,n " 6stado "/8 2/ p8
2/ 4d8
24d8
2Input class -bind datos "entrada :rande" "valor Address?ineJ
R'arcador de posici,n " irecci,n J "/8
20 stle "paddin:-top Xp@!"8 2input class -bind datos "entrada :rande"
place7older Rvalor 0aTsR "0aTs" /8 2/ p8
2/ 4d8
24d8 2Input class -bind datos "entrada :rande" "valor #iudad R'arcador de
posici,n " #iudad "/8
20 stle "paddin:-top Xp@!"8 2input class -bind datos "entrada :rande"
"valor #,di:o 0ostal R'arcador de posici,n " #,di:o 0ostal "/8
2a class"btn btn-pequeGa 7re*RZR-btn dan:er" datos bindRclick
Nroot.re'oveAddressR8 [ 2/ p8
2/ 4d8
2/ 4r8
2/ 4bod8
2/ 4able8
2082#lase button "btn btn btn pequeGa-pri'aria" bind-data Rclick addAddressR8 AGadir
nueva direcci,n 2/ button8
2/ 08
29r /8
2#lase button "btn btn btn-pequeGo D@ito" bind-data Rclick save0ro*ileR8 Vuardar
per*il 2/ button8
2Input class "btn btn btn-pequeGo-pri'aria" tpe "button" value "=olver al 0er*il
?ista" bind-data "click N root.back4o0ro*ile?ist" /8
2Script src "~ / scripts / #reate6dit.s"8 2/ script8
As/ 1ue nalente, a%li!a!i8n ostrar- las %antallas !oo %or la eGi3en!ia+ Pantalla L+ (ista de !onta!tos Ver todos los !onta!tos de la %antalla =+ Crear nue0o !onta!to Esta %antalla debe a%are!er una %antallaen blan!o %ara %ro%or!ionar 2un!ionalidad 1ue. Pantalla + A!tualiza!i8n de !onta!to eGistente Esta%antalla debe %antalla !on los datos de !onta!to de in2ora!i8n sele!!ionados.
-
8/15/2019 Apuntes ASP en Sharp Develop
30/47
-
8/15/2019 Apuntes ASP en Sharp Develop
31/47
VA()DAC)*N+
Casi 9eos terinado !on el diseño %arte de nuestra a%li!a!i8n .El 7ni!o 1ue 1ueda a9ora, es la 3esti8nde la 0alida!i8n !uando el bot8n el usuario 9a!e !li! en Juardar. (a 0alida!i8n es el %rin!i%al re1uisito ya9ora %arte -s i3norante de un d/a %ara !ual1uier a%li!a!i8n web. Por una !orre!ta 0alida!i8n, el usuario%uede saber lo 1ue 9ay datos 1ue deben re3istrarse. A !ontinua!i8n en este art/!ulo, 0oy a dis!utir
bibliote!a no!"out;S 0alida!i8n 1ue se %uede des!ar3ar usando NuJet. Vaos a 0er al3unos de loses!enarios de 0alida!i8n -s !ounes y la 2ora de lo3rarlo ediante la 0alida!i8n %orno!aut. Escenario 1: Nombre es un campo obligatorio en forma t9is.FirstNae [ "o.obser0able 56eGtendeos 5\re1uerido+ true]6.Escenario 2: El número m!imo "e caracteres para el nombre no"ebe e!ce"er "e #$ % no "ebe ser menos "e & caracteres t9is.FirstNae [ "o.obser0able 56eGtender 5\aG(en3t9+ >, in(en3t9+ ]6.Escenario ': (a e"a" es un campo obligatorio en laforma) % "ebe ser siempre ma%or que 1* % menor que 1$$ . t9is.A3e [ "o.obser0able 56 seeGtienden 5\re1uired+ true, -G+ L>>, in+ L?]6Escenario #: El correo electr+nico es una campoobligatorio % "ebe estar en formato "e correo electr+nico correcta t9is.Eail [ "o.obser0able 56 seeGtienden 5\re1uired+ true, eail+ true]6.Escenario ,: -ec.a "e Nacimiento es un campo
-
8/15/2019 Apuntes ASP en Sharp Develop
32/47
obligatorio % "ebe estar en formato a"ecua"o fec.a "eesta . .Date&2$irt9 [ "o.obser0able 56eGtender 5\re1uired+ true, 2e!9a+ true]6 Escenario /: El precio es un campo obligatorio % "ebe seren número a"ecua"o o formato "ecimal t9is.Pri!e [ "o.obser0able 56 se eGtienden. 5\re1uired+ true,!antidad+ true]6 Escenario *: Número "e 0eléfono es un campo obligatorio % "ebe estar en buenformato Nota+ n n7ero de telB2ono 0-lido de EE.. tiene el si3uiente 2orato+ LRDDRDDdddd ElL al %rin!i%io de la !adena es o%!ional y tabiBn lo son los 3uiones. G es !ual1uier d/3ito entre = y X,ientras 1ue d %uede ser !ual1uier d/3ito. t9is.P9one [ "o.obser0able 56 se eGtienden 5\re1uired+ true,n^ero de+ true]6. Escenario 3: campo 0o4ate "ebe ser ma%or que el campo -rom4ate
t7is.4oate ko.observable (). e@tend ({
i:ual *unction () {return (valor8 N (RZ ;ro'ateR) val ().)Q val val O "U"}
})!
Escenario 1$: Número "e teléfono "ebe aceptar solamente 5 6 78 $53 "e usuarios
re:e@ var / ^ (Q (H-_L {}) ^)Q (H.-LQ) (H-_L {}) ^ J (H-_L {W}) /
. t7is.07oneFu'ber ko.observable () e@tender ({patr,n re:e@})!
-
8/15/2019 Apuntes ASP en Sharp Develop
33/47
As/ 1ue, a9ora 9eos 0isto di2erentes ti%os de es!enarios de 0alida!i8n y su sintaGis a9ora 0aos a%onerlo en %r-!ti!a en nuestra a%li!a!i8n. Por esa %riera des!ar3a los "no!"out.0alidation.#s bibliote!autilizando NuJet. En este oento nuestro s!ri%t de 0alida!i8n est- totalente terinada y deber/a tenereste as%e!to+
var 0er*il *unction (per*il) {
var sel* esto!
sel*.0ro*ileId ko.observable (per*il pro*ile.0ro*ileId Q) .e@tend ({required
true})!
sel*.;irstFa'e ko.observable (Q per*il pro*ile.;irstFa'e RR) .e@tend ({required
true+ 'a@?en:t7 X})!
sel*.?astFa'e ko.observable (Q per*il pro*ile.?astFa'e RR) .e@tend ({required
true+ 'a@?en:t7 X})!
sel*.6'ail ko.observable (Q per*il pro*ile.6'ail RR) .e@tend ({required true+
'a@?en:t7 X+ correo electr,nico true})!
sel*.07one41 ko.observableArra (per*il pro*ile.07one41 HLQ)! sel*.Address41 ko.observableArra (per*il pro*ile.Address41 HLQ)!
}!
07oneline var *unction (telD*ono) {
var sel* esto!
sel*.07oneId ko.observable (telD*ono p7one.07oneId )!
sel*.07one4peId ko.observable (Q telD*ono p7one.07one4peId no de*inido) .e@tend
({required true})!
sel*.Fu'ber ko.observable (p7one.Fu'ber telD*ono RRQ) .e@tend ({required true+
'a@?en:t7 JX+ n`'ero de true})!
}!
Address?ine var *unction (direcci,n) {
var sel* esto!
sel*.AddressId ko.observable (direcci,n address.AddressId )!
sel*.Address4peId ko.observable (Q direcci,n address.Address4peId no de*inido)
.e@tend ({required true})!
sel*.Address?ine ko.observable (address.Address?ine direcci,n RRQ) .e@tend
({required true+ 'a@?en:t7 })!
sel*.Address?ineJ ko.observable (address.Address?ineJ direcci,n RRQ) .e@tend
({required true+ 'a@?en:t7 })!
sel*.#ountr ko.observable (address.#ountr direcci,n RRQ) .e@tend ({required
true+ 'a@?en:t7 X})!
sel*.State ko.observable (address.State direcci,n RRQ) .e@tend ({required true+
'a@?en:t7 X})!
sel*.#it ko.observable (Q direcci,n address.#it RR) .e@tend ({required true+
'a@?en:t7 X})!
sel*.]ip#ode ko.observable (Q direcci,n address.]ip#ode RR) .e@tend ({required
true+ 'a@?en:t7 X})!
}!
-
8/15/2019 Apuntes ASP en Sharp Develop
34/47
Des%uBs de la 0alida!i8n de nuestra solu!i8n nal se %are!e a la %antalla si3uiente des%uBs de 9a!er !li!en el bot8n Juardar+ Iasta a9ora, 9eos 9ablado a!er!a de la !onse!u!i8n de nuestro inter2az deusuario sin !ono!er !ual1uier a%li!a!i8n e2e!ti0a 5bases de datos de intera!!i8n6 es de!ir, la inter2az deusuario se !rea de 2ora inde%endiente %or !ual1uier diseñador : desarrollador sin !ono!er el ne3o!ioa!tual la l83i!a. UUU Eso es 3enial UUU A !ontinua!i8n, 0oy a 9ablar sobre !8o diseñar la base de datos y la2ora de a%li!ar la l83i!a de ne3o!io utilizando !a%as estru!turadas.
PA'TE =+ C'EA' D )SE& DE $ASE DE DAT&S 5S>? '=6+PA'A D$A
Desde el diseño de base de datos %ros%e!ti0a a !ontinua!i8n son las %rin!i%ales 2un!ionalidades 1uedeben ser !u%lidas+
• n !onta!to %uede tener Prier nobre, A%ellido y Correo ele!tr8ni!o.• n !onta!to %uede tener 0arias dire!!iones.• n !onta!to %uede tener 0arios n7eros de telB2ono.
. Para lo3rar la 2un!ionalidad de 3esti8n de !onta!tos, %or deba#o de diseño de base de datos se 9autilizado la rela!i8n entre las tablas son se37n aba#o dia3raa de base de datos+
-
8/15/2019 Apuntes ASP en Sharp Develop
35/47
PA'TE + D)SE& DE CAPAS (*J)CAS+ PA'A C&'E DESA''&((AD&'ES
Coo se señal8 anteriorente, nuestra estru!tura nal es+ A !ontinua!i8n 0aos a dis!utir la estru!tura3eneral %ara nuestra a%li!a!i8n, en tBrinos del 3ru%o l83i!o de los !o%onentes en !a%as se%aradas,1ue se !ouni!a !on los de-s !on : sin restri!!iones y !ada l83i!a tiene sus %ro%ias etas. (as !a%as
son un estilo ar1uite!t8ni!o, y 1ue resuel0e los %robleas de anteniiento y de e#ora en el lar3o%lazo. As/ 1ue 0aos a %ro!eder !on la adi!i8n de una bibliote!a de !lases en nuestra solu!i8n y lanobraos !oo A%%li!ation.Coon.
-
8/15/2019 Apuntes ASP en Sharp Develop
36/47
APP()CAT)&N.C&MM&N+
Esta es una a%li!a!i8n de bibliote!a de !lases, !on al3una 2un!ionalidad !o7n y %uede ser utilizado %ordi2erentes !a%as l83i!as. Por e#e%lo, de se3uridad, de re3istro, se3uiiento, 0alida!i8n, et! (os!o%onentes denidos en esta !a%a no s8lo %ueden reutilizar %or otras !a%as en esta solu!i8n, %erotabiBn %uede ser utilizar %or otras a%li!a!iones. Para 1ue sea -s 2-!il !abiar en el 2uturo, %odeosutilizar la inye!!i8n de de%enden!ias y la abstra!!i8n, !on un !abio /nio en nuestra a%li!a!i8n. Pore#e%lo, en esta !a%a 1ue 0aos a utilizar, un !o%onente 0alidador %ara 0alidar la entrada de datos, y(o33er %ersonalizado %ara re3istro de errores . o ad0erten!ia !ontinua!i8n se uestra la !a%tura de%antalla de la !ar%eta des%uBs de añadir la solu!i8n de bibliote!a de !lases !o7n+ A !ontinua!i8n, 0aos
a añadir una bibliote!a de !lases en nuestra solu!i8n y el nobre !oo A%%li!ation.Core.
-
8/15/2019 Apuntes ASP en Sharp Develop
37/47
APP()CAT)&N.C&'E+
(os !o%onentes de esta !a%a i%leentan la 2un!ionalidad b-si!a del sistea y en!a%sulan toda la
l83i!a de ne3o!io rele0antes. $-si!aente, esta !a%a noralente !ontiene !lases 1ue i%leentan lal83i!a de doinio dentro de sus Btodos. Esta !a%a tabiBn dene una nidad de Contrato de traba#odentro de la !a%a de n7!leo %or lo 1ue ser- !a%az de !u%lir !on el %rin!i%io de P). El ob#eti0o %rin!i%al esdi2eren!iar y se%arar !laraente el !o%ortaiento del doinio : ne3o!io %rin!i%al y los detalles dei%leenta!i8n de in2raestru!tura, tales !oo el a!!eso a datos y re%ositorios es%e!/!os li3ados a unate!nolo3/a %arti!ular !oo &'M, o si%leente las bibliote!as de a!!eso a datos o in!luso as%e!tostrans0ersales de la ar1uite!tura. De este odo, ediante el aislaiento de la 2un!ionalidad de laa%li!a!i8n Core, 0aos a auentar dr-sti!aente la !a%a!idad de anteniiento de nuestro sistea y se%odr/a in!luso ree%lazar las !a%as in2eriores 5a!!eso a datos, &'M, y bases de datos6 !on ba#o i%a!to%ara el resto de la a%li!a!i8n. A !ontinua!i8n, 0aos a añadir una bibliote!a de !lases en nuestra solu!i8ny el nobre !oo A%%li!ation.DA(.
APP()CAT)&N.DA(+
(a res%onsabilidad de CIA es y %ro%or!iona a!!eso a los datos y o%era!iones de %ersisten!ia !ontra labase de datos de ala!enaiento antener 0arias sesiones y la !oneGi8n !on la base de datos 7lti%le,
et! El ob#eti0o %rin!i%al a1u/ es en0ol0er la EF ConteGto !on una inter2az : !ontrato %or lo 1ue %odeosusarlo desde el Pesebre y !a%as de n7!leo sin de%enden!ias dire!tos a EF. (os !o%onentes de%ersisten!ia de datos %ro%or!ionan a!!eso a los datos alo#ados dentro de los l/ites de nuestro sistea5%or e#e%lo, nuestra %rin!i%al base de datos 1ue est- dentro de un !onteGto es%e!/!o ()M)TAD&6, ytabiBn a los datos eG%uestos 2uera de los l/ites de nuestro sistea, !oo los ser0i!ios @eb de eGteriorsisteas. Por lo tanto, tiene !o%onentes !oo 'e%ositorios 1ue %ro%or!ionan di!9a 2un!ionalidad %araa!!eder a los datos alo#ados dentro de los l/ites de nuestro sistea, o a3entes de ser0i!io 1ue!onsuen ser0i!ios @eb eG%uestos %or otros sisteas de ba!"end eGternos. Ade-s, esta !a%a %or lo3eneral tienen !lases base : !o%onentes !on !8di3o reutilizable %ara todas las !lases dere%ositorios. Si3uiente, 0aos a a3re3ar una bibliote!a de !lases en nuestra solu!i8n y el nobre !ooa%li!a!i8n. 'e%ositorio.
-
8/15/2019 Apuntes ASP en Sharp Develop
38/47
APP()CAT)&N.'EP&S)T&'+Esta es una bibliote!a de !lases y %uede ser a!!esible s8lo %or A%%li!ation.Mana3er. Para !ada %rin!i%alentidad ra/z en nuestro doinio, teneos 1ue !rear un re%ositorio. $-si!aente, re%ositorios son !lases :!o%onentes 1ue en!a%sulan la l83i!a re1uerida %ara a!!eder a las 2uentes de datos de la a%li!a!i8n. Porlo tanto, !entralizar la 2un!ionalidad !o7n de a!!eso a datos %or lo 1ue la a%li!a!i8n %uede tener unae#or !a%a!idad de anteniiento y la diso!ia!i8n entre la te!nolo3/a y la l83i!a de %ro%iedad de la !a%asCore. Mana3er ySi3uiente, 0aos a a3re3ar una bibliote!a de !lases en nuestra solu!i8n y el nobrede !oo a%li!a!i8n. DT&.
APP()CAT)&N.DT&+
De nue0o, esto es una bibliote!a de !lases, 1ue !ontiene di2erentes !lases de !ontenedor 1ue eG%one%ro%iedades y Btodos, %ero no se !ouni!an entre la !a%a de %resenta!i8n 5A%%li!ation.@eb6 y Ser0i!e(ayer 5A%%li!ation.Mana3er6. n ob#eto de trans2eren!ia de datos es un ob#eto 1ue se utiliza %araen!a%sular los datos, y en0iarlo de un subsistea de una a%li!a!i8n a otra. A1u/ 0aos a utilizar dtos %orla !a%a de Mana3er %ara trans2erir datos entre Bl iso y la !a%a de inter2az de usuario. El bene!io%rin!i%al a1u/ es 1ue redu!e la !antidad de datos 1ue ne!esita ser en0iado a tra0Bs del !able en
-
8/15/2019 Apuntes ASP en Sharp Develop
39/47
a%li!a!iones distribuidas. _Son tabiBn 3randes odelos en el %atr8n MVC. TabiBn %odeos utilizar DT&%ara en!a%sular %ar-etros %ara llaadas a Btodos. Esto %uede ser 7til si un Btodo toa -s de 4 o %ar-etros. A !ontinua!i8n, 0aos a a3re3ar una bibliote!a de !lases en nuestra solu!i8n y el nobre!oo a%li!a!i8n. Mana3er.
APP()CAT)&N.MANAJE'+
Esta es una bibliote!a de !lases y %uede ser a!!esible s8lo %or A%%li!ation.@eb. Para !ada 8dulo 9ay 1uede!larar uno Mana3er. (as %rin!i%ales res%onsabilidades de Mana3er son a!e%tar la soli!itud de !a%a :inter2az de usuario @eb, enton!es !ouni!arse !on los re%ositorios ne!esarios y ani%ular datos en2un!i8n de la !ondi!i8n des%uBs 0uel0a de nue0o la res%uesta. Esta !a%a interedia entre la inter2az deusuario y 'e%ositorios.
APP()CAT)&N.@E$+
-
8/15/2019 Apuntes ASP en Sharp Develop
40/47
En el art/!ulo anterior, ya 9eos i%leentado esta !a%a usando ;a0as!ri%t datos !ti!ios. Esta es laa%li!a!i8n web ASP.NET MVC inde%endiente, y s8lo !ontiene !o%onentes de inter2az de usuario, !oo9tl, .as%G, !s9tl, MVC, et! Puede tabiBn ser !ual1uier a%li!a!i8n de @indows. Se !ouni!a !onal3unos Btodos de !a%a 3erente, lue3o de e0aluar los resultados y ele3ir si desea ostrar un error o%a3eL o %a3e= et! et! Esta utiliza!i8n !a%a #a0as!ri%t %ara !ar3ar un odelo %ara la %resenta!i8n, %erolos datos se %ro!esan en el ser0idor a tra0Bs de un a#aG . soli!itud, %or lo 1ue el ser0idor s8lo ane#ar lal83i!a de ne3o!io y el #a0as!ri%t 3estiona la l83i!a de %resenta!i8n Para entender e#or !8o las !a%as se!ouni!an entre s/, re!ordeos el re1uisito ini!ial+
PANTA((A L+ ()STA DE C&NTACT&S VE' T&D&S (&S C&NTACT&S
L.L Esta %antalla debe ostrar todos los !onta!tos dis%onibles en la base de datos.
L.= El usuario debe ser !a%az de eliinar !ual1uier !onta!to.L. El usuario debe %oder editar !ual1uier in2ora!i8n de !onta!to.L.4 El usuario debe ser !a%az de !rear un nue0o !onta!to. Para rellenar los datos de la !uadr/!ula, en !ar3ade la %-3ina, lo llaaos JetAllProles 56 Btodo de Conta!tController. Este Btodo de0uel0e eGistentodos los %erles en la base de datos !oo un ob#eto ;S&N, a !ontinua!i8n enlazaos !on sel2.Prolesob#eto ;a0aS!ri%t. A !ontinua!i8n se uestra el !8di3o %ara llaar JetAllProles 56 de !onta!t.#s+
-
8/15/2019 Apuntes ASP en Sharp Develop
41/47
var 0ro*iles=ie>&odel *unction () {
var sel* esto!
var url "/ contacto / VetAll0ro*iles"!
var re*res7 *unction () {
N .:etKS1F (rl+ {}+ *unci,n (datos) {
sel*.0ro*iles (datos)!
})!
}!
El bot8n aitin:ialo: ({})!
N .aa@ ({ 4ipo R6li'inarR+ url R#ontacto / elete0ro*ile /R O id+
D@ito *unction () {sel*.0ro*iles.re'ove (per*il)! }+
error *unction (err) {
error var KS1F.parse (err.response4e@t)!
. N ("2iv8 2/ div8") 7t'l (6rror.'essa:e) .dialo: ({'odal true+
tTtulo "6rror"+ botones {"1k"
*unction () {N (t7is) .dialo: ("close")! }}}) S7o> ().!
}+
co'pleta *unction () {closeaitin:ialo: ()! }
})!
}}!
Por tanto Crear nue0o bot8n y Editar enla!e, s8lo rediri3ir a la %-3ina CreateEdit !on id !oo > %ara Crearnue0o y %ara editar el %erl id de la la sele!!ionada. A !ontinua!i8n se uestra el !8di3o %ara!reateProle y EditProle de !onta!t.#s+
sel*.create0ro*ile *unction () {
>indo>.location.7re* R/ #ontacto / #reate6dit / R!
}!
sel*.edit0ro*ile *unction (per*il) {
>indo>.location.7re* R/ #ontacto / #reate6dit /R O pro*ile.0ro*ileId!
}!
A !ontinua!i8n se uestra la re%resenta!i8n de un dia3raa de !ouni!a!i8n entre tres !a%as %rin!i%ales
-
8/15/2019 Apuntes ASP en Sharp Develop
42/47
PANTA((A =+ C'EA' NEV& C&NTACT&
Esta %antalla debe a%are!er una %antalla en blan!o %ara %ro%or!ionar 2un!ionalidades !oo. =.L El usuariodebe ser !a%az de entrar en su : su %rier nobre, a%ellido y dire!!i8n de !orreo ele!tr8ni!o. =.= suariodebe %oder añadir !ual1uier !antidad de n7eros de telB2ono, 9a3a !li! en A3re3ar n7eros. =. suariodebe %oder 1uitar !ual1uier n7ero de telB2ono. =.4 suario debe %oder añadir !ual1uier n7ero dedire!!iones 9a!iendo !li! en Añadir nue0a dire!!i8n. =. suario debe %oder eliinar !ual1uierdire!!i8n. =.O Ia3a !li! en el bot8n de 3uardar debe 3uardar los datos de !onta!to en la base de datos y elusuario 0ol0er- atr-s en la lista de !onta!tos %-3ina.=. Ia3a !li! en el bot8n Vol0er al Perl deb/anre3resar al usuario a la %-3ina de !onta!to de lista.
-
8/15/2019 Apuntes ASP en Sharp Develop
43/47
PANTA((A + ACTA()QAC)*N DE C&NTACT& ER)STENTE
Esta %antalla debe ostrar la %antalla !on los datos de !onta!to de in2ora!i8n sele!!ionados. .L El
usuario debe ser !a%az de odi!ar su : su %rier nobre, a%ellido y dire!!i8n de !orreo ele!tr8ni!o. .=El usuario debe %oder odi!ar : borrar : Añadir !ual1uier !antidad de n7eros de telB2ono, 9a3a !li! enA3re3ar n7eros o eliinar enla!e. . El usuario debe %oder odi!ar : borrar : A3re3ar !ual1uiern7ero de dire!!iones 9a!iendo !li! en Añadir nue0a dire!!i8n o eliinar enla!e. .4 Ia3a !li! en el bot8nde 3uardar debe a!tualizar los datos de !onta!to en la base de datos y el usuario 0ol0er- de nue0o en la%-3ina (ista de !onta!tos.. Ia3a !li! en el bot8n Atr-s %ara Perl deb/an re3resar al usuario a la %-3inade !onta!to de lista. Coo se dis!uti8 en la a%li!a!i8n anterior, tanto %ara la Nue0a !rea!i8n y EditareGistente re1uisito de 1ue estaos utilizando una sola %-3ina !oo CreateEdit.!s9tl, identi!ando el0alor '( %ara Prole)D es de!ir, si Prole)D en '( es >, enton!es es la soli!itud %ara la !rea!i8n de unnue0o %erl, y si se trata de al37n 0alor, la %eti!i8n es %ara editar el %erl eGistente. Deba#o )denti!a!i8nlos detalles de i%leenta!i8n+ En !ual1uier !aso 5Crear o Editar6, en la %-3ina de !ar3a 1ue ne!esitan%ara ini!ializar los datos %ara P9oneTy%e y AddressTy%e. Para ello !ontaos !on un Btodo enConta!tController !oo )nitializePa3eData 56. A !ontinua!i8n se uestra el !8di3o en CreateEdit.#sini!ializar abas atri!es+
-
8/15/2019 Apuntes ASP en Sharp Develop
44/47
Address4peata var!
var 07one4peata!
N .aa@ ({
url url#ontact O R/ Initialie0a:eataR+
asTncrono *alse+
4ipo datos RsonR+
D@ito *unction (son) {
Address4peata son.lstAddress4pe41!
07one4peata son.lst07one4pe41!
}
})!
-
8/15/2019 Apuntes ASP en Sharp Develop
45/47
A !ontinua!i8n, Para Editar %erl 1ue ne!esita %ara obtener los datos del %erl, %ara 1ue ten3aosBtodo JetProle$y)d 56 en nuestro Conta!tController. Modi!aos nuestro !8di3o CreateEdit.#s eGistente!oo+
N .aa@ ({
url url#ontact O R/ Vet0ro*ileBId /R O 0ro*ileI+
asTncrono *alse+
4ipo datos RsonR+
D@ito *unction (son) {
sel*.pro*ile ko.observable (nuevo per*il (KS1F))!
sel*.p7oneFu'bers ko.observableArra (ko.utils.arra&ap (son.07one41+ *unci,n
(telD*ono) {
devolver el telD*ono!
}))!
sel*.addresses ko.observableArra (ko.utils.arra&ap (son.Address41+ *unci,n
(direcci,n) {
la direcci,n del re'itente! }))!
}
})!
Por 7ltio, Para Juardar datos 1ue teneos dos Btodos en la base de datos. MBtodo Si es Crear nue0o la1ue llaareos Sa0eProle)n2ortion 56 de Conta!tController de-s nosotros te llaaos Btodo%dateProle)n2oration 56. Modi!aos nuestro !8di3o CreateEdit.#s eGistente !oo+
N .aa@ ({
4ipo (sel*.pro*ile () 0ro*ileI8 R04R.Q "post")+ cac7e true+
4ipo datos RsonR+
url url#ontact O (sel*.pro*ile () 0ro*ileI8 R/ pdate0ro*ileIn*or'ation id QR O.Q
. sel*.pro*ile () 0ro*ileI R/ Save0ro*ileIn*or'ationR)+
datos KS1F.strin:i* (ko.toKS (sel*.pro*ile ()))+
content4pe Rapplication / son! c7arset 4;-< R+
asTncrono *alse+
D@ito *unction (data) {
>indo>.location.7re* R/ contactoR!
}+
error *unction (err) {
var err KS1F.parse (err.response4e@t)!
errores var ""!
*or (var clave en err) {
i* (err.7as1>n0ropert (clave)) {
errores O ke.replace (". per*il"+ "") O "" O err HclaveL!
}
}
N ("2iv8 2/ div8") 7t'l (errores) .dialo: ({'odal. #ierto+
4Ttulo KS1F.parse (err.response4e@t) .'essa:e+ botones {"1k"
-
8/15/2019 Apuntes ASP en Sharp Develop
46/47
*unction () {N (t7is) .dialo: ("close")! }}}) S7o> ().!
}+
co'pletar *unction () {
}
})!
C&NC(S)*N
Eso es todo UUU Es%ero 1ue dis2rutes de este art/!ulo. o no soy un eG%erto, y tabiBn 1ue no 9e se3uido lanora de toda la industria en el oento de es!ribir este art/!ulo. eso, en %o!as %alabras, es todo lo1ue sB %ara e%ezar el diseño de ASP.NET MVC 4 a%li!a!i8n. Es%ero 1ue 9ayan dis2rutado este tutorial ya%rendido al3o.Todo !oentario : Voto son -s 1ue bien0enidos .... , Si usted tiene al3una %re3unta nodude en %re3untarEstarB en!antado de 9ablar -s en los !oentarios. Jra!ias %or su tie%oU
C*M& T)()QA' E( C*D)J&
Des!ar3ar ar!9i0o de !oandos de base de datos a1u/+ A%%li!ationWD$.s1l Contiene S
-
8/15/2019 Apuntes ASP en Sharp Develop
47/47
!adena de !oneGi8n en %roye!to A%%li!ation.@eb.
'EFE'ENC)AS
• 9tt%+::"no!"out#s.!o:• 9tt%s+::3it9ub.!o:eri!barnard:no!"outValidation:wi"i:Con3uration• 9tt%+::twitter.3it9ub.!o:bootstra%:• 9tt%+::do!s.!astle%ro#e!t.or3:@indsor.MainPa3e.as9G• 9tt%+::i!roso2tnlayera%%.!ode%leG.!o:
• 9tt%+::sdn.i!roso2t.!o:enus:library:`X=L4?.as%G
ltia edi!i8n L de enero =>L a las ==+4L %or anandran#an%andey , la 0ersi8n
Des!ar3as
ACTA(Contacto App Manager utilizando
ASP.NET MVC 4
FECIA Jue 17 de enero 201 a la! 7"00 a#
ESTAD& E!ta$le
DESCA'JAS 12.%1
PNTAC)*N
1& puntuacione!
'pina !o$re e!te co#unicado de
E( DE MS ADA Jra!ias señor %or un art/!ulo tan a3radable y !o%leta.
uy buenaUVer todas las !r/ti!as
(os anuncios por "esarrolla"or 9e"ios
ACT)V)DAD
PJ)NAS V)STAS V)S)TAS DESCA'JAS
14&1 &72 1(%
D/as+>
http://www.codeplex.com/site/users/view/anandranjanpandeyhttp://ddmvc4.codeplex.com/releaseshttp://ddmvc4.codeplex.com/releases/view/100506?RateReview=truehttp://ddmvc4.codeplex.com/releases/view/100506#ReviewsAnchorhttp://developermedia.com/http://ddmvc4.codeplex.com/http://ddmvc4.codeplex.com/releaseshttp://ddmvc4.codeplex.com/releases/view/100506?RateReview=truehttp://ddmvc4.codeplex.com/releases/view/100506#ReviewsAnchorhttp://developermedia.com/http://ddmvc4.codeplex.com/http://www.codeplex.com/site/users/view/anandranjanpandey