Transcripciones
1. Introducción: Hola y bienvenidos
a este curso, desarrollo web
básico
con ASP.Net Core F5. Soy tu instructor para
VOR Williams y soy ingeniero de software y
conferenciante en este curso, vamos a estar aprendiendo
sobre ASP.Net Core, que es un framework web libre y de
código abierto. Y también es el
sucesor de ASP.Net, que es desarrollado por Microsoft. En este curso,
también vamos a estar buscando conectar nuestra aplicación
ASP.Net Core a una base de datos de Microsoft SQL Server. Para ello,
vamos a estar
mirando Entity Framework, que es una biblioteca
que está especialmente diseñada para este
tipo de interacción. También vamos a estar
mirando el control de fuentes, que es una práctica de camiones
y manejo de cambios cumplir con la escuela fuente
estará utilizando GitHub como la herramienta para facilitar
esta práctica. Este curso asume
que tienes conocimientos
fundamentales en
HTML, CSS y C-sharp. Si no, entonces te
animo a que
consultes mis otros cursos
sobre esos temas. Con todo eso dicho y hecho, empecemos y no puedo esperar a verte en el curso.
2. Configura un proyecto básico de ASP.NET: Bienvenidos de vuelta chicos. En esta lección, solo
vamos a estar sentando nuestro entorno de desarrollo para nuestra aplicación ASP.Net Core. Y lo que me gustaría
que hicieras es simplemente golpear Start y escribir en Visual
Studio Installer. Ya tienes instalado Visual
Studio. Lo que tenemos que hacer es instalar algunas más cargas de trabajo para que podamos llegar a azotar el desarrollo. No lo hagas, una vez
que subas a ese instalador, deberías ver una ventana mirando algo parecido a esto. Y lo que puedes hacer
es hacer clic en Modificar. Y al pulsar Modificar, vas a ver una lista de cargas de trabajo
potenciales
que puedes instalar. Por lo que ya tienes el
para el desarrollo de escritorios. Lo que necesitarías
es el para ASP.Net y desarrollo web. Entonces si ya no lo
tienes marcado, entonces él puede seguir adelante y
tomarlo y luego
seguir adelante e instalar. Por lo que se puede ver que
ya tengo la mía partió para hacer eso y se pueden
instalar otras cargas de trabajo. Pero para este curso en particular
o las próximas lecciones, definitivamente queríamos
tener ASP.Net y desarrollo
web
ticked e instalado. Ahora una vez que haya completado
esa instalación, puede seguir adelante y
lanzar su Visual Studio. Y a partir de ahí vamos
a crear un nuevo proyecto. Para que puedas seguir adelante y
crear nuevo proyecto. Y estamos buscando una aplicación web
ASP.Net Core. solo puedas escribir en la
búsqueda ASP.Net Core Web App. Por lo que verás
bastantes de ellos. Y notarías que tienes la aplicación web que
utiliza páginas de Razor. También tienes la aplicación web core que utiliza el controlador de
vista modal. Y luego tienes API web y tienes un montón
de otras plantillas. A medida que obtienes más experiencia, puedes experimentar con
las diferentes plantillas. Pero para esto, por supuesto, vamos a estar mirando aplicación web
ASP.Net Core
usando páginas de Razor. Podemos seguir adelante y golpear eso. Adelante y pega Siguiente. Y vamos a estar llamando este proyecto auto arrancando. La idea general detrás los proyectos será que
estemos construyendo una app que permita a la gente reservar o rentar un auto de una empresa
según sea necesario. Lo siento, es agradable y simple
habilidad será lo suficientemente
complicada maravillosamente como para que pongamos los fundamentos
debajo de nuestros cinturones. Por lo que sólo podemos seguir
adelante y golpear Siguiente. Y vamos a
estar usando dotnet F5. Y luego podrás habilitar la compilación de tiempo de ejecución de la
maquinilla de afeitar, que nos ayudará con
nuestra depuración y pruebas. No vamos a sentarnos a la
autenticación ahora mismo. Lo vamos a hacer manualmente
más adelante para que podamos ver todos
los componentes que
encajan con esos
ajustes en su lugar. Puedes seguir adelante y golpear Crear. Ahora que tenemos nuestro
proyecto en marcha, lo que vamos
a hacer es simplemente echar un vistazo rápido a lo que
sacamos de la caja. Obtenemos esta estructura del proyecto. Y cuando golpees Start, notarás que
obtenemos aplicación web ya hecha. Tenemos la app web, tenemos nuestra barra de navegación en la parte superior,
el área de contenido. Entonces es muy similar a lo que habríamos
visto cuando estamos mirando los fundamentos del desarrollo
HTML, HTML. En este punto, no hemos
escrito ningún código, pero aún así tenemos una
página web arriba con al
menos dos páginas para
nuestro placer visual. Vamos a estar
perforando hacia abajo en básico de lo que
sacamos de la caja. Si bien todo esto se
genera donde encontramos lo que se pega y
hace cuando
lleguemos, estaremos explorando la estructura de carpetas
que obtuvimos con esta aplicación web
y lo que todo de estos archivos significan y representan.
3. El proyecto de la visita de Razor: Muy bien, así que estamos de vuelta. Vamos a estar discutiendo la dinámica o al menos
una estructura de carpetas y los diferentes archivos
que obtenemos en nuestra aplicación ASP.Net Core. Ya has pasado
y mirado HTML y CSS, y JavaScript
y cómo se
combinan
todos esos factores para darte un
sitio web y la red de fondos. Pones un nuevo proyecto
en una carpeta 12, tendes a poner los
diferentes tipos de activos, las imágenes en su propia carpeta, archivos
CSS en su
propia carpeta, etcétera Bueno, esto solo se basa
en esos principios. También habrías visto que durante los ejercicios de codificación de C Sharp donde cada vez que estabas
creando un proyecto, tienes una carpeta completamente
nueva donde habrían estado
todos esos archivos para el
proyecto. Es el mismo principio o solución está en una
carpeta por sí misma, el proyecto es suficiente
todo por sí mismo. Y luego hay
diferentes archivos y carpetas en lugar de
esa otra carpeta. Empecemos con
mirar propiedades. Propiedades nos da
este archivo dependencias uno tiene que ver con
bibliotecas y frameworks. Verás más de
eso a medida que avanzamos. No voy a aburrirme, ya
sabes, o
abrumador con eso. Pero si miras propiedades, verás que
tienes un archivo JSON que tiene alguna configuración de lanzamiento, por lo que generalmente no tienes que
modificar este archivo en esto, estás haciendo algo
muy explícito, que no estamos haciendo en
este momento y
probablemente no lo hagamos dentro
del ámbito de este rumbo. Pero es bueno apreciar
lo que hay aquí. Verás que tienes la aplicación URL
Canadá definida aquí, donde dice que
tienes la URL en una dirección HTTP y luego
tienes el puerto SSL, lo que significa que cuando pulsamos Start, estamos va a
poder acceder a la aplicación ya sea
escribiendo en esta URL o HTTPS barra de dos puntos slash host
local con el
número de puerto de los puertos SSL, generalmente no tiene que
cambiar nunca esto. Entonces es bueno
entenderlo una vez más. Siguiente carpeta mayor es
nuestra carpeta raíz www. Por lo que realmente no se ve
como una carpeta basada en la retención. Las otras carpetas realmente miraban en esta estructura de
proyecto, pero lo que te darías cuenta es que tiene subcarpetas en ella. Entonces esta es una carpeta que almacena los
archivos estáticos para el sitio web. Entonces cuando decimos
archivos estáticos, como se puede ver, es él la carpeta CSS, la carpeta JS, y
otra llamada salto. Todos esos activos y los archivos
CSS, archivos JavaScript, o
bibliotecas de terceros que podrían ser una combinación de archivos CSS y
JavaScript o jQuery. Te gustaría almacenar
todos ellos dentro de la raíz www porque
la propia aplicación tipo de mapea esta ubicación
y hace que sea muy fácil
acceder a esa ubicación cuando
quieras acceder al CSS, el JavaScript, o cualquiera de
los demás archivos activos. Para que puedas ver viene incorporado ya hecho con bootstrap,
jQuery, validación jQuery, y otra biblioteca
para la validación de jQuery. Entonces todas esas bibliotecas
tipo de salen de la caja. Si queremos sumar
otras bibliotecas, que vamos a hacer más adelante, siempre
podemos hacer clic derecho
y podemos ir a Agregar. Y luego hay una característica para simplemente instalar la biblioteca
del lado del cliente. Cuando llegamos a ese punto, en realidad
podemos simplemente usar esto y buscar nuestra biblioteca. Y
nos mostraría todos los resultados, cómo podemos simplemente instalarlo en la aplicación sin consultar
manualmente y pescar. Así que recuerda cuando estábamos haciendo nuestra inclusión jQuery y así sucesivamente wet para realmente
ir al sitio web, obtener el archivo y copiar
localmente, o usar un CDN. Mientras se utiliza este gestor de
biblioteca. Podemos hacer todo eso aquí
en tan solo unos clics. Y en realidad
solo lo descargaría a nuestro sistema o a nuestras carpetas de
proyectos para nosotros. Muy bien, entonces ahí es donde realmente se mantienen todos nuestros archivos
estáticos. Sepa si alguna vez has visto
una aplicación MVC, estarás acostumbrado
a ver
las carpetas modelo, ver y controlador fuera de la caja. Si no, eso está bien. Pero la diferencia entre la plantilla MVC o
controlador de vista de modelo y
la plantilla de páginas Razor
es una grasa que
la forma en que
se estructuran las páginas y sus activos es diferente. Con el MVC, tienes el modelo que es un
archivo de clase por demasiado. Tiene la vista,
que es el archivo HTML. Y luego tienes un controlador que era la inteligencia. En páginas de Razor. Lo que han hecho es que
dan una carpeta llamada páginas, y luego cada página viene con el CSS HTML o el archivo HTML, así
como archivo de código R, que duplica tanto como la
inteligencia como el modelo. Echemos un vistazo a la página de
índice. La página de índice. Recuerda de HTML Basics, siempre nombra tu índice de
primera página. Bueno, aquí está Microsoft a la altura de ese principio muy
simple. Entonces cuando hago clic en
la página de índice, el archivo CSS HTML, entonces verás que esto
es realmente sólo un archivo HTML. Sí, tiene algunos adornos,
pero una vez que superes eso,
que discutiremos más adelante, notarás que son
las mismas etiquetas que habríamos aprendido
de HTML Basics. La etiqueta div, la etiqueta de imagen, la etiqueta P, y cualquier otro
objetivo que usted sabría, todos
son utilizables
dentro de este archivo, el punto CSS, el archivo CSS de punto HTML. Parece el código C-Sharp que
acabamos de ver. Muy bien, entonces tenemos
la clase pública llamada índice modelo colon. A esto se le llama herencia. El modelo de índice está
heredando del modelo de página, que es una clase base
que viene incorporada. Pero el hecho
del asunto es que a esto
se le llama modelo de índice. Y si echas un vistazo
hacia atrás a la clase de índice, notarías que en
la parte superior dice uno, soy una página, y luego dos, le dice al modelo. Se nota una declaración de que
mi modelo es modelo de índice. Eso significa cualquier cosa que yo cualquier cosa que se
defina en lugar de modelo de índice se puede acceder desde la página web a
medida que construimos sobre ella. Eso lo apreciarás un poco más. La mayoría, la mayoría de las veces cuando
ves las IRA son la página más, si no todas las veces, entonces las
vas a ver en parejas. Vas a ver
que es dot CSS HTML. Yo soy el que
es dot CSS HTML. En función de tu Visual Studio, es posible que los tengas en realidad
algo anidados por defecto, pero en realidad puedes
cambiar ese anidamiento. Sé que está deshabilitado para mí, puedo habilitarlo. Tiendo a pensar que esto es un poco más ordenado porque
cuando está anidado, solo
puedo hacer clic y luego veo el archivo resultante directamente
debajo de ese. A veces se vuelve
confuso cuando todos ellos están listados así,
pero eso depende de ti. Sólo te estoy mostrando
que puedes enumerar, puedes anidar y
deshabilitar eso a voluntad. Entonces como dije, cada vez que creas una página, o al menos una página de
resultados estándar, vas a
terminar con
ambos archivos conociendo
la carpeta compartida. Aquí es donde los archivos
que van a ser utilizados o accedidos por
todos los demás archivos, todas las demás páginas, Ahí es donde se almacenan estos. Echemos un vistazo al diseño. No, habrías notado
que con nuestra página de índice, déjame simplemente saltar buffer
con índice rápidamente. Habrías notado que la página de
índice no tiene esa estructura de esqueleto HTML que habíamos discutido
desde lo básico. Recuerda que siempre empezamos con cinta
adhesiva y luego las
etiquetas HTML y luego golpeamos
y cuerpo y luego ponemos el contenido, esto va directamente
al contenido. Lo que sucede es que están utilizando lo que llamamos un layout. O de vuelta en el día lo llamamos plantilla o una obra maestra, donde trazan la temporal una vez
en lugar de
repetir, repetir, repetir esta
plantilla cada PDF, 20 páginas, hay que
repetir esta plantilla? Sí, en un sitio web básico, es absolutamente necesario. Pero lo que hicieron fue una especie
de resúmenes que trabajo ocupado. Recuerda una vez más,
los frameworks están configurados para reducir la cantidad de
repetición o reducir la probabilidad de que tengas
que repetir ciertas cosas. Porque saben que
tienes que ver con esta plantilla HTML
cada vez. Cuando desarrollaron
un.the.net Core Framework, lo
que hicieron fue crearon al mismo tiempo y luego te
permitieron renderizar los
diferentes pH del interior de esta área llamada render body. Lo que realmente sucede es
que cada página siempre va a tener la
etiqueta HTML, la etiqueta head. Esto se establece globalmente COC, siempre está vinculando a las hojas de estilo para que no
tenga que
hacer eso en cada página. Tienes la
etiqueta corporal que va a tener la
oreja de cabecera con el nervio, por lo que no tienes que crear
lo suficiente en cada página. Y entonces
siempre vas a tener esa clase div con container. Recuerda que miramos eso, esa clase div es
igual a container. Y luego sí, vas
a ver algunas etiquetas nuevas. Puedes usarlos, es posible que
nunca los uses en este punto. Realmente no tienes que hacerlo. Me preocupa
, pero el punto
es que cualquiera que sea la razón por la que PG crea con automáticamente obtener
renderizado dentro de esta área, están dentro de esta plantilla
general. Para leerte aquí
cambiará el local, los Layouts, lo siento, fuera de
todas las páginas a nivel mundial. Esa es una forma más fácil de mantener tu sitio web
porque ahora no tienes que
hacerlo a través de todas las páginas
como habríamos visto cuando estamos haciendo el HTML
básico y CSS. Todo eso es una especie
de presentado aquí. Se ven las
inclusiones de scripting en la parte inferior de la página y
se puede modificar todo. Entonces veamos, por ejemplo, que lo que se
generó automáticamente para nosotros sería el
título View Data de la página. Si volvemos a nuestra página de índice, veríamos que ver el
tipo de datos es igual a homepage. Eso es lo que se
renderizaría en lugar de
su título de datos. Entonces eso es como una variable
y un marcador para lo que esté poniendo
en cualquier pH que tengamos. Una vez más, el título es lo que se muestra en el
navegador en la tina. Quería cambiar
esto de ser un poco de texto a solicitud de
reserva de autos. Un poco más legible por humanos. Pero ese es el título
en la barra de navegación, lo siento, en la tina
del navegador, entonces el navbar también tiene carb mirando arriba
escrito aquí mismo. Entonces lo que voy a
hacer es control y F5 y esa férula para
correr sin depurar. Y cuando surja esta app, lo primero que quiero que
tomen nota es el hecho de que esto está diciendo homepage. Entonces eso es cargar
la página de índice. En caso de que no
creas que ahí está. Indice dice homepage, ¿verdad? Por lo que está cargando la página de inicio o la página de índice aplicación de
reserva de autos dash. Eso son textos estáticos que
ponemos en el título. Muy bien, ¿y si quisiera
actualizar este bit de texto aquí? Yo tampoco quiero decir carb
enganchado ahí arriba. Entonces. Puedo ir y encontrar ese poco
de código que está aquí mismo. Y lo voy a cambiar a solicitud de reserva de autos. Voy a salvar algo de
humor. Siempre ahorre. Desafortunadamente, no los he
visto implementar ningún
AutoCAD en Visual Studio. Eso hubiera sido muy guay, pero supongo que no lo
hicieron, no lo han hecho por una buena razón. Pero después de hacer ese cambio, solo
voy a Control,
refrescar mi navegador. Y he aquí, vemos el cambio que
se está haciendo y ese cambio una
vez más, estos globales. Entonces si voy en privacidad
para Go on home, cada una de estas páginas es solo heredando del diseño
general. Por lo que sólo voy a
actualizarlo también en el pie de página. Sólo puedo repasar, cambiarlo en el pie de página. En todo caso, quería
hacer trampa y cizallar. Quiero decir, esto es decir 2021
si necesitaba actualizarlo a 2022 o no mostrar
solo privacidad, poniendo todo lo que
necesito poner, todo eso se está
actualizando globalmente. Entonces después de hacer ese cambio, sólo
voy a
refrescar una vez más. Y ves que el cambio no
se refleja. Eso es lo fácil que es
realmente modificar globalmente ¿verdad? Ahora si quisieras
modificar las páginas, bueno, es sólo un montón de HTML. Entonces esto es lo que he ido a hacer. Voy a ejecutar
antiguo el HTML de nuestra clase básica que
teníamos en nuestra página de índice. Y sólo voy
a darle una bofetada a esta nueva página de índice y
vamos a ver qué pasa. Entonces aquí está nuestro HTML
desde lo básico. Lo que pasa una vez más es que no
necesitamos todas estas etiquetas. Necesitará esto, el
cuerpo HTML todo lo que realmente quiero. Ni siquiera necesito el contenedor. Recuerdo que tuvimos que
repetir Kantian o
tenemos que repetir la
novela por todas partes. Y luego agregamos un
div para el contenido. Bueno, lo que hay en el contenido
es lo que realmente necesitamos, que es lo que
se muestra en la página. Tampoco necesitamos un pie de página
porque tenemos nuestro pie de página. Sólo voy a tomar
todo este contenido. Realmente no estoy preocupado por el funcionamiento del botón aún no
están. Bueno, lo que voy
a hacer es simplemente reemplazar el contenido predeterminado
que vino con intento con
contenido REA de nuestro curso. Fui a salvar eso y luego
hacer una mirada refrescante a eso. En ninguna parte viendo que
sólo podemos modificar las
páginas de la misma manera. Lo único es que no
tenemos que repetir nuestro esqueleto cada
vez que se hace por nosotros. Sólo necesitamos el contenido. Y observa que todas las clases
siguen funcionando para las pantallas de los botones y para
los perros y la fuente. ¿ Por qué? Porque el archivo CSS para Bootstrap ya está
incluido fuera de la caja. Ya
nos están dando ese archivo bootstrap. Ahora, una cosa es que
hemos conseguido a las cinco. Esto podría cambiar en el futuro, Pero el nodo correcto que es la biblioteca
bootstrap, puedo perforar todo el camino hacia abajo
y ver la grasa física. Entonces cuando lo dije, te
facilitan el acceso. Todo lo que realmente necesitas
es esta slash tilde. Y entonces comenzará a
darte todas las carpetas en
la jerarquía de carpetas de
dub, dub, dub root. Si quisiera llegar al
archivo CSS que está en mi sitio CSS, o quería llegar a la
carpeta CSS y lo diré hoy, luego barra, y luego comienza a enumerar todas
las carpetas para mí. Quería llegar al archivo CSS. Muy bien, entonces
por eso dije que todos tus archivos estáticos a los
que necesitas
acceder pueden ir a acceder pueden ir a carpeta
dub, dub, dub root, y eso lo hará muy fácil. Pero yo estaba haciendo el
punto de que podemos perforar todo el camino
hasta el archivo bootstrap. Y la
versión Bootstrap que
sacamos de la caja es 4.3.1. En lo básico
miramos usando cinco, pero luego con esta plantilla solo
nos hacemos bootstrap, bosques
bootstrap, perdón, lo
cual no es gran cosa porque las diferencias entre los dos no son tan grandes de un trato. Y la documentación siempre
está ahí en caso estés usando algo de uno que no esté
disponible en el otro, como no me ves
tratando de usar Bootstrap para clases que no están
en Bootstrap F5, siempre se
puede volver a
verificar eso. Muy bien, entonces ahora que tenemos una mejor comprensión de cómo funcionan
el diseño y los
archivos en general. Y ahí hay otros archivos, led view importaciones y vista de inicio. Si comienzas básicamente dice que
solo usa ese archivo de diseño. Entonces si tenemos varios diseños, en realidad
podemos crear
otro layout. Si quisieras que un tipo de usuario viera un layout
y otro tipo de usuario para ver otro layout o tener diferentes
diseños por página, sea cual sea,
en realidad puedes dictar cuál
se deben utilizar. Todas esas cosas
vendrán a su debido tiempo. Por lo que sólo voy a continuar el recorrido por los
archivos y carpetas. Y pasemos a
la aplicación settings.js. En la aplicación settings.js, Zen es como un
archivo de configuración donde
básicamente estipulamos cosas
como cadenas de conexión. Ya sabes, dónde buscar la base de datos en configuraciones estáticas que necesitamos tener
en su lugar para asegurarnos que ciertas características se
desarrollen de manera particular. Todas esas cosas
se pueden definir en ese archivo de configuración de la aplicación. Tenemos el program.cs, que es muy similar a lo que habríamos visto
en nuestro C-Sharp en diverso, donde cada vez que
creamos un nuevo proyecto, teníamos un archivo llamado program.cs que empató
método up llamado media. Es lo mismo, program.cs, Y aquí está nuestro método principal. Entonces todo lo que sucede
es que cuando
golpeas IS Express nuestro inicio de calor, básicamente simplemente llamando al programa, llamando al método medio. Y el método principal dice construir
y ejecutar la aplicación. Entonces, ¿dónde sabe qué configuraciones
poner en marcha? Utiliza el
archivo de inicio y el inicio aquí representa la
startup sobre el archivo CS, que es otro lugar
donde viven las configuraciones. Aquí en el constructor de startup, ves que están haciendo
lo que llamamos inyección. Entonces más tarde
te pones en un estándar, pero están inyectando
un objeto de configuración de IA
que representa OER hasta el archivo JSON settings.js. Para que si cualquiera que sea la
configuración estática que
pongamos ahí, podamos acceder a ellos y
luego vía código hasta que use esta configuración cuando esté inicializando
esta característica. Entonces el archivo de inicio es básicamente donde ocurre toda la inicialización de la
característica. Porque ves
aquí, estamos viendo servicios dot dirección o páginas más adelante cuando estamos agregando autenticación y otras
cosas al proyecto, verás que tenemos que
venir aquí y hacérselo saber. De acuerdo, por favor use este módulo, por favor use este middleware, por favor utilice esta
función que vamos a
agregar a este archivo a
medida que la aplicación crezca. El punto de inicio css
realmente acaba de encargarse de dictar lo que debería estar en su lugar para el momento en que se inicie la
aplicación. Entonces si estropeo algo en este expediente o ciertas
cosas en este expediente, si iba a
entrar a esta línea
ya
que no creo que esa
línea parezca útil. Y luego traté de correr,
entonces va a estar recibiendo este
error diciendo que
hay algún desajuste entre lo quiero hacer y qué
características están disponibles para mí sin tratar de leer
esta flecha palabra-para -palabra. Es básicamente que he visto
que estás tratando ejecutar inicializar la compilación en
tiempo de ejecución, pero no vi dónde me
dijiste que puedo usar el conjunto de funciones para la compilación en
tiempo de ejecución. Esa línea que comenté es integral a las características que hay que llamar en
otra parte de la aplicación. Para que a medida que avanzas y
entiendes Who.NET Core funciona, entenderás qué
bibliotecas deben ir a dónde. Una vez más, esto no es
algo que necesites memorizar. Solo necesitas
tener una buena idea de cómo funciona esta cosa para que
cuando quieras una nueva característica, puedas ir e investigar
adecuadamente para
averiguar qué exactamente necesitas
incluir para ponerlo
en marcha . Eso es realmente todo para el recorrido por
la estructura de carpetas. Cuando volvamos,
empezaremos a trabajar un poco más en nuestra interfaz y a explorar
cómo todo está conectado.
4. Comprender la sintaxis de Razor: Bienvenidos de vuelta chicos. En esta lección, vamos
a estar mirando cómo
podemos experimentar con
nuestras matrices de melocotones. Ignoro el modificador de PHS
o suficiente barra, e incluso miro cómo probablemente
podemos inyectar nuestra molestia en
diferentes lugares, similar a cómo vimos que se
inyecta en la startup. Así que empecemos
analizando lo que queríamos. Entonces voy a crear
una página muy sencilla. Sólo estoy cerrando todas las instrucciones
descripto. Y luego en las páginas voy
a crear una nueva carpeta. Entonces esto siempre es una
buena idea porque cuando se tienen las
diferentes áreas, lo que pasa es que
tienes tres operaciones principales. Crear, leer, actualizar, eliminar. Por lo que la mayoría de las veces
quieres crear una carpeta. Y luego dentro de esa
carpeta tendrías las diferentes páginas para soportar
las diferentes características. Ya que estamos haciendo reservas
de autos, lo primero que
necesitaríamos
probablemente tener serían los autos. Muy bien, así que voy a
tener una carpeta llamada autos. Y dentro de esta
carpeta para los autos, tendría un fichero de índice que representaría
la primera página en la que aterrizas cuando votas por
mirar autos, que normalmente sería
como la lista de autos. Tienes la edición, tienes el delete y tienes que leer, lo que significa que estoy mirando a
unos autos particulares detalles. No estamos listos para meternos en
todas esas complicaciones. Solo estoy explicando por qué tenemos esa estructura de carpetas
que verás que como un tema común a lo largo este curso y en la
mayoría de las aplicaciones web, independientemente de la tecnología
o el stock sea usado dentro de autos, vamos a crear un archivo de índice. Así que sólo voy a
seguir adelante y hacer clic derecho y
golpear Añadir ir a la página de la maquinilla de afeitar. Y lo que estamos haciendo aquí es
usar las herramientas de andamios. Las herramientas de andamios
nos permiten tipo de generar archivos. Supongo que Microsoft
ha visto que
conocemos el tipo de archivos que
queríamos, nuestro framework. Y estas son cosas
que tendrías que repetir manualmente h veces. Entonces aquí está la herramienta de andamios. Usa esto y haremos la
mayor parte del trabajo pesado, poniendo en todo el B6, asegurándote de que no olvides nada y puedes
continuar desde ahí. Entonces supongo que por eso nos
dieron esta bonita herramienta. Sólo vamos a crear
un pH de resultado vacío para no, fui a golpear Agregar y lo
voy a llamar index.html, CSS HTML, y
ya está ahí para mí. Así que voy a seguir
adelante y pegaré Agregar. Por lo que ahora tengo este
nuevo archivo de índice. Entonces si volvemos a mirar, vemos páginas slash cars slash
index que solo
te estoy dando una idea de la URL porque index siempre
será el primer archivo. Entonces cuando vayamos a recortar autos, automáticamente buscará el archivo de índice para
cargar eso primero. Muy bien, entonces lo
que queremos hacer aquí, voy a decir Ver datos. Vamos a estar escribiendo estas
cosas manualmente nosotros mismos. Fuimos a decir título. Recuerde que se
ve, el tipo de datos es un marcador de posición que se
alimenta en el diseño. Y sólo voy
a ver lista de autos. ¿ Está bien? Lo que quiero hacer
es simplemente decir H1, lista de autos, algunas
cosas simples. No estamos listos para complicarnos
demasiado o simplemente sudar o apetitos
y entender qué, y si miras
esta página de índice, verás que se
ve muy similar a la otra página de índice. El motivo por el que las
páginas de índice no se tocan es que las subcarpetas en las que
están son diferentes. Este índice está en
las páginas generales, por lo que esta es toda la página de toda la aplicación. No obstante, cuando
entramos en los autos de barra, los autos
smash tendrán su propia primera página y archivo de índice está
haciendo para ser diferente, pero verá que
tienen los mismos 2s directos. Esta es una página, Aquí hay
un modelo y usando el espacio de nombres allí para este modelo versus el espacio de
nombres para el otro. Una vez más, obtenemos
nuestro código detrás archivo para nuestro modelo de índice. Si quisiera navegar
a esta nueva página, lo que necesitaría
hacer es modificar mis alelos y dejar que la
barra navbar tenga el nuevo enlace. Entonces sólo voy a copiar
uno que existe ahí está. Simplemente copiaré el enlace de la página de inicio
existente y lo cambiaré todo para verlo para
que no tengamos un área. Tenemos la página ASP. ¿ Dónde se paga la ASP? Entonces las páginas ASP ya no
recortan el índice. Es el índice de slash cars slash. Aviso que no necesariamente necesitamos la extensión donde
no necesitamos la extensión. Entonces es aquí donde tipo
de obstruyeron algunas de las cosas
a las que estamos acostumbrados con ba, HTML básico. Porque si lo
miras con cuidado, aquí no
hay etiqueta de deriva H. No decir que no podemos usar
una naturaleza si pudiéramos. Podríamos decir que h es
igual a tope adentro. Si vamos a
ver hf es igual a construir la URL exacta para
llegar de aplicación a página es que los autos van a ser un poco difíciles
porque no podemos sólo ver el nombre del archivo lo haría extensión como si no pudiéramos CSS
básico y HTML. Entonces lo que nos han dado
se llaman ayudantes de etiquetas, donde dirán solo 0 me basado en el camino de
la estructura de carpetas. Y voy a generar
ese H ref para ti. Entonces la página ASP es igual a, y sé que tengo que
ir a recortar autos. Entonces la primera slash significa la
raíz de la aplicación. Entonces tengo que ir
a la carpeta de autos. No tuve que ir
al archivo de índice. Ahí es donde debe conducir este
enlace. Generará el riff
H en tiempo de ejecución. Lo veremos en unos pocos. Por lo que quiero que esto diga autos. Muy bien, así que ahora tenemos
una nueva URL con una nueva página. Y voy a
seguir adelante y correr como,
oh, sólo estamos haciendo cosas de interfaz de
usuario. Podemos simplemente hacer Control F5. No tenemos que
depurar cada vez porque de esta manera
es un poco más rápido. Ahora estamos cargando
nuestra página de aplicación. Recuerda que esta es
nuestra página de inicio que
migramos desde nuestros archivos estáticos. Y si quisieras
migrar a los otros, y probablemente también
seré una buena práctica para ti. Pero ahora mismo estamos
empezando con esto. Y luego cuando hago clic en autos, antes de que incluso haga clic en autos,
es inspeccionar elemento. Inspeccionar elemento nos
va a mostrar el H ref por cómo llegamos ahí. Si miras el miedo de las aurículas, dice barra de EHR,
eso significa ir a casa. Slash cars significa meta
de la URL base, que es lo que
vemos en el navegador, localhost con ese número de
puerto slash cars. Si nos fijamos en éste,
verás localhost slash privacidad. Cuando voy adelante
y golpeé los autos. Entonces veo que estoy
aterrizando en mi nueva página, que es lista de cartas. Ves que ni siquiera tenía
que decir especialmente index.html. Porque por defecto, en todas partes navegador irá primero a
la página de índice. Entonces eso es realmente todo
lo que se necesita para construir un nuevo enlace y conseguir que las
páginas se vean. Muy bien, ahora
veamos en espera el archivo de código y el
archivo HTML puede interactuar con él. En este momento estoy mostrando esa lista de autos texto
directamente en la página. Tal vez no siempre
sea el caso como
vimos cuando estábamos haciendo
la codificación C Sharp. En ocasiones los datos que
necesitan ser mostrados o interactuados con estos
dinámicos a partir de la entrada del usuario. Necesita estar en una
variable de alguna manera, pero aún necesitamos mostrarla. Entonces, ¿qué pasa si quisiera
poner este bit de texto en una variable en el archivo de código
y luego tenerlo mostrado. Así que sólo voy a
cortarlo en el archivo de código. Lo que voy a hacer dentro de nuestra clase es
darle una nueva propiedad. Así que sólo voy a decir prop, presione Tab dos veces y
luego digo cadena. Y esto va a estar
golpeando entonces en get one, la página carga este método llamado get es el primer
método que se llama. Cada vez que
navegues a una página, vas a golpear eso en, conseguir lo que quieras
preparar para esa página. Si tienes que cargar datos, si tienes que sentarte en un mensaje
como si estuviéramos a punto de hacer no, tienes que
asegurarte de hacerlo en Git, entonces todo eso
estará listo para cuando
el pH se
cargue al usuario. En este caso, quiero ver rumbo es igual a los
tics que acabo de empatar, que es lista de autos. No, estoy preparando esta variable. Me estoy asegurando de que el
valor esté disponible ante el paciente o es como
hago que el valor se muestre en la página? Bueno, en la propia página, donde quiera que la quiera, que estaría
entre estas etiquetas H1. Y entonces esto es lo que
llamamos las vistas de la
navaja borrador o levantamos una sintaxis. Más bien, la sintaxis de la razón nos
permite entretejer o un
código C-Sharp con nuestro código HTML. ¿ Está bien? Así que en cualquier momento ves
un anuncio diciendo que te
está preparando para
escribir código C-sharp, porque este es el código C-Sharp que es un espacio de nombres de C-sharp. Sin embargo vemos HTML en el pH. Muy bien, así que déjame
mostrarte si quería imprimir algo desde el
lado C-agudo en lugar del HTML, todo lo que necesito es al firmar. Básicamente desde
esa directiva que estás a punto de escribir C-sharp, ningún modelo es como
una variable estática o una variable global
que representa un objeto del modelo, que es el código todo lo que sea público
en el código detrás archivo como este encabezado ya está disponible para mí por
mí viendo modelo dot. Entonces obtengo todas las propiedades del modelo incluyendo
mis personalizadas. Verás algunos
que no pusiste. No hay problema, no te desanimes, no te vuelvas flusterizado ni nada. Pero si miras de cerca,
ves golpear. Esa es la que acabo de crear. Sólo puedo decir encabezado model.py. Y luego si guardo
eso y luego refresco la página y lo que puedes hacer
mientras estás en este punto, siempre
puedes simplemente hacer una compilación
usando Control Shift y B. Y luego puedes simplemente
refrescar la página. Probablemente aún tengas abierto desde cuando estabas depurando. Pero entonces usted ve aquí que todavía
estamos viendo
una lista de autos. Y si inspecciona elemento, no
hay indicios de
que sea C-Sharp o HTML. En lo que respecta a Brasil, solo
está viendo el HTML. Entonces esa es una
oferta polar es una sintaxis. Podemos
poner dinámicamente cualquier cosa allí. Si quisiera
cambiar el encabezamiento en lugar de mantener toda
la página. Y si tuviera
que mostrar que toma múltiples lugares en lugar de tener la estática
toma múltiples bases, lo puse en una variable. Aquí. Lo cambio de variable solo para que
sepamos que está funcionando. Y fui a hacer una construcción. Ahora una vez que se haga esa construcción, voy a hacer una actualización. Y luego C, Ahí vamos. Esta cosa autos de variable. Eso hace que sea
mucho más fácil hacer una página dinámica donde
podríamos tener que cambiar
el texto sobre la marcha. Lo cambiamos una vez. Y entonces solo podemos
conocer referencia a ella
tantas veces en nuestro
código como queramos. A diferencia de cuando estábamos
haciendo nuestras páginas estáticas y si sumamos lo duro
toma múltiples lugares, tenemos que ir
manualmente y cambiar. Está en todas partes.
Podemos hacer eso aquí, sólo agradable y fácil. Entonces si replico todas esas páginas son cruzadas o todas
esas etiquetas, ahí está. Si lo cambio una vez, se cambia tantas veces. Muy bien, entonces esa es
una forma agradable y fácil de entender cómo funciona
la sintaxis. Cómo podemos poner algo
en el archivo de código y acceder a él dentro
de la página Razor. A continuación te voy a
mostrar nuestro primer pedacito de lo que llamamos inyección de
dependencia. Entonces lo que vamos
a hacer es mover este texto de encabezado de la variable
C-sharp aquí. Y
lo vamos a poner en la configuración de la aplicación y luego vamos
a mostrar un todo, solo se
puede inyectar un absceso. Estas configuraciones, comen
con bastante facilidad y las muestran en
la página de la misma manera.
5. Mensaje desde ajustes: Por lo que ahora vamos a
estar mirando cómo
podemos inyectar dependencias en nuestro pH y acceder a los datos una
manera muy lo que
llamamos desacoplada. Entonces esa es una de las cuatro características más y
marquesinas consulta
de enlace descendente hace lo que llamamos inyección de dependencia, que es un
principio muy importante en el desarrollo sólido. El D en la palabra sólido en realidad significa inyección
de dependencia. Tan sólido es un montón de
principios que nos
ayudarían a practicar prácticas de codificación limpias
y buenas. Y la inyección de dependencia
es muy importante. Y.NET Core mezcla
dependencia inyección, muy, muy fácil para nosotros. Lo que vamos a hacer es en la configuración de app dot archivo JSON, voy a poner en
una nueva configuración. Y una vez más, esto es sólo para fines demo solo para que podamos entender cómo fluye todo
tipo de y todo. Entonces vamos a
sentarnos a una coma. Y luego fui a
crear una nueva sección o un nuevo nodo para decir que
esto es mensaje. Por lo que estoy llamando a este mensaje. Entonces básicamente lo que tenemos es
como un par clave y valor. Entonces aquí estoy creando mi volumen y
todos están separados por comas. Se nota que el registro es la clave y luego el valor
es lo que llamamos objeto. Y el objeto tiene una clave
que tiene en otro objeto, y cada clave tiene su propio valor. Cada vez que ves un colon, lo que está a la derecha
es el valor, lo que está a la izquierda es la clave. Y luego la coma separa
los nodos principales. Entonces este es un nodo Min que
separa un host de carga, que es otra carga
o vinculación de claves Vardy. Y luego eso es coma. Por lo que estamos creando nuestro propio mensaje de par de claves
válido. Y entonces esa es la sintaxis
básica JSON. Agradable y fácil de entender. Mensaje va
a tener el valor. Esta es la lista de autos. Lección mensaje simple. Nada demasiado elegante. Sabes, lo dije en
las cosas opuestas. ¿ Cómo accedo a este
texto en la página para que se muestre más en
el ADN al usuario. Entonces lo que tenemos que hacer es ir
a nuestro archivo HTML index.js. Voy a crear
otra propiedad. Voy a llamar a
éste de menos. Por lo que para duplicar su
control D o Control CNV, similar a Visa Studio Code, pero también funciona Control D. Tengo otra propiedad. Lo estoy llamando mensaje. Y necesito sentar mensaje para tener el valor del archivo de cosas
opuestas, lo que significa que necesito
acceder a la configuración. Por lo que al igual que discutimos
en el archivo de inicio, estábamos inyectando aquí el objeto de
configuración. Y entonces eso
nos permitió acceder a cualquier cosa, o al menos los cargo
porque no escribimos esto. Quien escribió esto hizo esa inyección para poder acceder a la configuración
que lo hará. Vamos a
seguir ese modelo. Los principios de inyección de
dependencia uno, tienes un constructor, por lo que vamos a
escribir C TOR presionar Tab dos veces y luego
obtenemos el constructor. Comienza
listas de parámetros, lo cual está bien. Pero entonces tenemos que decirle a qué dependencias
debería ayudar. Entonces le voy a decir
que debería estar usando la configuración I. Y si lo
desea, sólo puede entrar en la
startup sobre CS y
se puede llevar la configuración I. Y estamos llamando a la configuración de
variables. Línea roja significa que
necesitamos una biblioteca, así que control dot y yo
sólo puedo seguir adelante y golpear Enter. Por lo que incluirá
la declaración using. Por lo que sólo hacemos eso y conseguir que la línea roja de la declaración de
uso desaparece. No, necesito inicializarlo. Entonces le estoy diciendo que
necesito la figuración ícono de la inversión de contenedor de
control o veré contenedor. El startup básicamente
pone todo en ese contenedor
entre la startup en el archivo program.cs. Ponen esas cosas en
el contenedor y luego en
cualquier lugar de mi aplicación
puedo acceder a ellas
desde el contenedor. Así que literalmente cargó todo, Todo desde
este
archivo de configuración de aplicación en ese contenedor. Y estoy viendo que
quiero acceder a ese archivo, que luego se obstruye a este tipo llamado configuración
Uyghur. Necesito una variable local
que pueda usar mientras que en esta página para acceder
son como una copia. Entonces lo que voy
a hacer es sólo decir conducto de
control después de
ponerlo en el constructor. Y luego fui a decir crear y asignar configuración de campo, y eso automáticamente hace ese proceso de inyección por mí. Por lo que ahora tengo esta versión local sólo para que podamos
verlas de manera diferente. Voy a llamar a
éste un subrayado. Y tiendo a hacer eso
con mis campos en la configuración de partituras y puntos de
Control para cambiar el nombre
en todas partes, por lo que se deshace de ese error. Ahora que tenemos este objeto de
configuración inyectado uno e inicializado
y accesible a la página. Ahora puedo decir que mi mensaje debe ser
igual a configuración. ¿ Está bien? El objeto de configuración me
permite ver, dame la clave lo que quieres acceder
para que recuerden que acabamos discutir
par clave-valor es cuál es la clave que quería
acceder al mensaje. Voy a ver
la clave es mensaje. Recuerda de IRA,
Básicamente es una matriz. Este archivo se convierte
básicamente en una matriz a la que ahora puedo acceder usando la clave
como subíndice. Una vez que hago eso, ahora
tengo una nueva variable llamada mensaje que es accesible
a mi página de índice. Así que puedo debajo del encabezamiento, poner tal vez unas etiquetas h4. Y luego solo
vamos a
separarlos con una etiqueta de RRHH. Se pone un poco de fantasía con él. Y fui a decir,
firmaría modelo dot. Y luego recuerda
que una vez que digo model.py tienen acceso a todas
las propiedades que están
dentro de la clase modelo, puede acceder al mensaje. Ningún mensaje no es sólo algo que escribimos
y pusimos en una variable. El mensaje está afrontando todo
el camino desde el malestar. ¿ Ves hasta dónde
estamos lo que está trastocando? Tiene el valor y el
par de claves para el mensaje. Y luego en la página, cargue. Estoy viendo cuando
estás cargando esta página, quiero obtener una copia de este objeto de la dependencia
o del contenedor del COI. Y estoy creando
mi copia localmente. Y luego sobre la marcha puedo ver dónde se está cargando la
página, ir a esa copia local del archivo de configuración de
la aplicación, consígueme el valor que
tiene el mensaje clave. Cuando hago todo eso, puedo hacer una construcción. Y todavía tengo mi página de la depuración anterior y lo
ves sólo actualizaciones para mí? No. Estoy viendo ese
mensaje viniendo desde el archivo de configuración de la aplicación. Eso es básicamente todo
Dependency Injection funciona a medida que crece la aplicación. Vamos a ver
definitivamente más de eso. Pero al menos esto es
un bonito poco esencial de cómo en realidad se puede acceder a datos de otras partes de la aplicación y aún así conseguir que se muestren en la página. Y tus usuarios nunca
serían más sabios en cuanto a dónde vienen estos
datos, ya sea una base de datos o se trata de una variable
en segundo plano. Pero estamos en control por lo
que sabemos cómo hacerlo dinámico. Los usuarios solo viendo
lo que parece
ser una página muy estática,
cargarla a ellos.
6. Añadir un marco de entidad: Hasta ahora hemos estado
viendo algunos de
los conceptos básicos de cómo podemos conseguir páginas de
Razor muestren fechas
dinámicas vienen
de nuestro código C-Sharp. La realidad, sin embargo, es
que nosotros, en nuestro escenario, realmente no
vamos
a estar codificando duro este
tipo de valores y poniendo en variables
y mostrando, sobre todo dado el tipo de
aplicación que estamos edificio, que es una
aplicación de reserva de autos donde vas a necesitar lista de tarjetas que
puede demostrarse cambiar. Entra a la empresa un auto nuevo, uno se retira, etcétera donde fuimos después de
gestionar la reserva. Entonces lo que tenemos que hacer es encontrar una forma muy dinámica de
almacenar realmente este tipo de datos. Entonces necesitamos emplear
los servicios de Entity Framework para
que podamos uno, crear la base de datos para
interactuar con la base de datos, y tres, seguir
construyendo sobre la base de datos. Lo que vamos a estar
haciendo antes de
meternos en alguna de las complicaciones
es engendrar, lo
que necesitamos almacenar, lo vamos a hacer relativamente simple, pero es
bastante complicado que podamos conseguir buena idea de lo que hay
que cubrir en un escenario
general. Lo que queremos hacer es
emplear a la S en sólido, que es separación de preocupaciones. Y el principio
detrás de eso es uno, un método o un archivo
nunca debe tener más de
una responsabilidad. Por eso es bueno que para cada página haya un archivo de código
dedicado. Entonces toda la responsabilidad de este archivo de código es para esa página. Lo que vamos a
hacer es quitarlo solo archivos y lo vamos
a aplicar a proyectos. Ahora que estamos
pensando en las interacciones de la base de datos, lo que tenemos que hacer es
crear otro proyecto que va a hospedar o wholes más bien todos nuestros objetos relacionados con la
base de datos. Solo voy a
minimizar o colapsar la reserva del auto y
fui directamente a la solución. Haga clic en Agregar. Y voy a
crear un nuevo proyecto. De este listado de proyectos, vamos a elegir
una biblioteca de clases. Entonces si no lo tienes
en el reciente proyecto estimula, siempre
puedes buscar. Lo que queremos es una biblioteca de clases
C-Sharp. Puedes seguir adelante y seleccionar
eso y estamos llamando a esta reserva actual
hasta punto Theta. Entonces el nombre va
a significar que este es el proyecto de datos. Hit Next, y
queremos mantenerlo como un proyecto dotnet F5 y crear una librerías de clase de versión muy
despojada de la obligación C-sharp son dos proyectos C-sharp a los
que se solían. Porque se puede ver que
este proyecto acaba de decir que archivo
CSV y el único clasificador, casi
parece una aplicación de consola y los
expositores conocen program.cs. Y si incluso miras en
el archivo del proyecto real, verás que todas las lágrimas son solo el marco objetivo. Si vuelves a tu consola, aplicaciones de C-sharp, notarías que también tienen una instrucción de ejecución para hacerle saber que se trata de
un archivo ejecutable. Lo que vamos
a necesitar hacer aquí es eliminar la primera clase, es definir algunas clases. Entonces nuestro, lo que estamos haciendo
es crear entidades, que realmente sólo podría
pedir archivos que se
convertirán en tablas de
base de datos. Entonces lo que sea, y
ya miramos OOP, sea cual sea que
nuestras propiedades de los datos que
quisiéramos almacenar. Estamos creando nuestra clase
para representar eso,
que más adelante en realidad nos
convertiremos en una tabla
a través de la API es que Entity Framework
nos permite por ahora solo queríamos entender cómo
diseñamos el modelo de dominio. Por lo que nuestro primero me dejó modelo, desde que
empezamos con los autos, serán cuatro cartas. Por lo que queremos una mesa
para almacenar los autos. ¿ Cuáles son las propiedades de los autos que necesitamos para almacenar? Bueno, en general,
eso podría diferir en
función de las necesidades empresariales,
los diferentes escenarios. Así que sólo voy a
basarlo fuera de mi escenario. Podrías hacer un
poco más o
financiarlo necesita hacer un
poco menos que yo. Pero mientras comprendan el alcance general de lo que
estamos tratando de lograr, entonces eso no es problema. Lo que tenemos que hacer es crear nuestra primera lección haciendo clic derecho en
el proyecto de datos, estoy agregando una clase y lo
voy a llamar símbolo de coche. Dentro de coche. Vamos a hacer pública
esta clase. Y luego defendemos
las propiedades. El primer inmueble de
cualquier tabla de base de datos. Si aún no has hecho
bases de datos, no te preocupes por mí esto
lo más amable posible. Si estás familiarizado
con las bases de datos, sabrás que el
siempre empieza con una clave primaria que
es auto-incrementando. Si está familiarizado con
el uso de SQL Server o así sucesivamente. Sabes que tienes que
pasar por unos pasos, tienes que sentarte y restricción de
identidad, también
tienes que hacerle saber lo más incrementos
IN1 y así sucesivamente. Con Entity Framework
o en el diseño una entidad que
sabemos que vamos a
utilizar Entity
Framework para manejar. Todo lo que realmente necesitas
hacer es llamarlo ID. Simplemente haciendo esto en diferentes donde
sabremos que, vale, esta es la clave primaria y debe ser
auto-incrementándose. Eso es todo. Por lo que siempre tienen la
clave principal para cada, la mayoría, si no todas las entidades, el 90% de sus entidades
siempre debe tener un valor de
clave primaria llamado ID. Si no quieres llamarlo ID, entonces hay otras cosas que
podrías tener que hacer. Usando Entity Framework para que reconozca como clave primaria. Pero entre llamarlo ID
o ID de coche o identificador de nombre de tabla, esos dos garantizarán que Entity Framework Core fue
visto como la clave principal. Tenemos una identificación,
¿qué necesitamos? Voy a decir
pública int año, tal vez el año del
vehículo sea importante, también. Ir a almacenar el año. Y lo siguiente
que voy a almacenar es el nombre de la cuerda,
nombre del vehículo,
Toyota Yaris, etcétera sólo
voy a mantenerlo simple y eso
siempre está tirando una pelota. El auto habría
creado nuestra primera entidad. Ahora lo siguiente que
necesitamos para que Entity Framework reconozca que esta clase debe ser una tabla, se llama contexto DB. Entonces DB abreviatura de contexto de
base de datos, lo que significa que estoy mirando todos los recursos
en la base de datos, y los reconozco como tales. Vamos a estar
configurando el contexto DB. No vamos a
estar conectando ni creando ninguna base de datos por el momento. Sólo estamos estableciendo
las bases, ¿verdad? No. Voy a
hacer clic derecho una vez más y agregar otro archivo, nuevo elemento o clase más bien. Y voy a llamar a
esta reserva de un auto. Db contexto, niacina, nombre
fácil de recordar. Carb mirando hacia arriba contextos DVI, sólo otro archivo de clase. Ahora el contexto DB va
a ser una vez más público. Y va a heredar
de una clase base que nos da Entity Framework
llamado contexto DB. Con sólo escribir el contexto DB. Y si le das a Visual
Studio unos segundos,
te darás cuenta, de acuerdo,
maravillas y herramienta de libro de errores, para poder utilizar
los contextos DVI, necesitas instalar un paquete
llamado marco NTD. Por lo que tienes Entidad Marco y trabajo anti diferente Corte. Estamos utilizando dotnet Core, por lo que tenemos que usar
Entity Framework Core, que es el último y más
grande de Entity Framework. Ahora lo genial es que
necesitamos usar un gestor de paquetes. Entonces, en lugar de que tengamos que
irnos y encontrar las cosas manualmente, Visual Studio viene con un gestor de paquetes
llamado New get. Tenemos dos opciones.
Podemos permitir que simplemente siga adelante y lo encuentre
para nosotros e instalarlo. O podríamos ir manualmente, hacer clic derecho y presionar
Administrar paquetes NuGet. Por lo que es bueno entender
todas tus opciones porque el desarrollador que lo sabe necesita Entity Framework
probablemente comenzaría aquí. Probablemente
sólo irías a NuGet, ir a los bros.
Y luego vería todos los paquetes
disponibles para él. Y entonces realmente
vería que tienes Microsoft dot Entity Framework
Core dot SQL Server. Y ahí está la
que se anunciaba para decir que tengo un montón
de otros, pero no vamos
a preocuparnos por
los que no necesitas. Así que en realidad, vamos a
estar usando bases de datos de SQL Server en diferentes núcleos de trabajo
es en realidad de código abierto y disponible para la mayoría de los motores de
bases de datos. En MySQL, postgres
SQL secuela luz, todos ellos son diferentes motores de
base de datos o proveedores. En el marco proporciona
API que le
permiten usar C-sharp para
hablar con cualquier puerta única. No obstante, si nosotros, ya que
estamos utilizando SQL Server, sólo
podemos seguir adelante
e instalar el en diferente trabajo
core dot SQL Server, que nos dará las API del servidor
SQL
así como la biblioteca base
para Entity Framework Core. Así que sólo voy a usar
NuGet gestor de paquetes. Y todo lo que tengo que hacer es
golpear esta flecha hacia abajo. Podemos elegir versión. Vemos que esta es la
última versión estable. No es necesario modificar eso. Golpea Instalar,
darte unos segundos. Podrías obtener
licencias y acuerdos pronunciables. Y como esos co-morbosos, basta con hacer clic en Aceptar y aceptar y
denotar el tiempo que está instalado. Y cuando volvamos
al proyecto CS, verá que se agrega un
grupo de artículos donde el paquete hace referencia
que se pone. Eso está bien.
Podemos dejar que lo
dejemos hacer lo suyo
en el fondo. Pero ahora cuando vamos alrededor de dos contextos de
dB y control, vemos que tenemos la capacidad de simplemente
agregar el espacio de nombres. Esa fue nuestra primera
prueba de cómo podemos usar NuGet package manager para agregar bibliotecas que faltan
inherentemente. Adelante en la declaración de uso. Ahora tenemos el contexto DB. Para que podamos dejar que el contexto DB sepa cuáles deben ser
las tablas. Tenemos que sumar al público DB sit. Entonces le decimos crea un Db,
Db ciudades Entity Framework. Habla por una mesa. El contexto representa la base de datos, conjuntos
BB representa una tabla. Tenemos que proporcionar el modelo que
deben basarse estas tablas. Bueno, hemos creado nuestro
modelo en forma de auto. Alguien que diga base de datos. Tendrás una mesa
en coche modelado. Y debes llamarlo autos cuando se crea en la base de datos
real. Así que veamos
eso otra vez. Toda esta clase
representa nuestra base de datos en todos los activos que
estarán ahí
para ver las tablas, procedimientos
almacenados, etc. Una vez que queremos agregar una tabla, queremos la mitad para crear el modelo que debe seguir
la tabla. Entonces en el caso del auto, le
dimos las propiedades que sabemos hacer la clase por no. Esto es realmente solo mostrar
cómo se ve nuestra clase como una tabla en términos de desarrollo de
bases de datos. Acabamos de crear una clase
con todas las propiedades, todos los campos que conocemos nuestra o tabla necesita para
tener los tipos de datos. Y luego le estamos diciendo al contexto de la
base de datos que necesito una nueva mesa o un
conjunto DV de tipo auto. Y quería llamar a autos. Cuando volvamos, lo que
vamos a hacer es configurar
mi agresión donde en realidad le decimos uno, generar código que va a crear la base de datos y vamos a
evaluar cómo eso mira y hacia nosotros realmente lo haremos esa base de datos y
ver que todo esto va a funcionar en la forma en que
estamos hablando de ella. No.
7. Añadir base de datos a Proyecto: Bienvenidos de vuelta chicos. Entonces
ahora vamos a estar sentados o base de datos real. Ya configuramos nuestro contexto, que básicamente representa una
conexión a la base de datos. Ya creamos al
menos una entidad o una tabla para esa base de datos. No, necesitamos una vez arriba lo que llamamos cadena de conexión. Y luego para crear lo que
llamamos migración, que sería el conjunto
de instrucciones que podría usar
Entity Framework para informar cómo va a ir sobre la
creación de la tabla y la base de datos y
cualquier otros activos que deben
crearse en consecuencia. Subimos a nuestra
configuración de aplicaciones desde nuestra reserva de autos. Y lo que tenemos que hacer aquí
es agregar nuestra cadena de conexión. Ahora la sintaxis para
un flujo clínico se ve algo así, y lo acabo de agregar
justo encima del registro. Entonces recuerda que todo esto
es un gran objeto JSON. Estoy agregando una nueva clave
llamada cadenas de conexión. Y luego esa clave tiene un valor de objeto que toma
otro par de valores clave, conexión
predeterminada, y
luego este es el valor. Así que vamos a pasar por
lo que tiene este valor. Este valor tiene un servidor
y el nombre del servidor
es más o menos el nombre de la máquina
o el nombre de la instancia de
base de datos. Si no estás tan familiarizado
con las bases de datos, eso está bien. Contamos con un proveedor de
base de datos incorporado con Visual Studio
llamado Local DB, MS Sql base de datos local, siempre se
puede llegar a
estas bases de datos yendo al Explorador de
Objetos de SQL Server. Si no quieres
tenerlo de un lado como yo, siempre
pueden ir a View. Y luego puedes buscar Explorador de objetos de
SQL Server. Entonces esto te da acceso
instantáneo a esa instancia de base de datos
y puedes simplemente
desplegable y es local DB slash
MS SQL local DB en el B2C, todos esos servidores de bases de datos
es igual a Debian local, escríbelo exactamente cómo lo ves. Paréntesis abierto,
DB local, paréntesis de cierre. El doble slash es porque
necesitamos escapar de la barra. Si tenemos una sesión,
se obtiene ese error. Necesitamos tener esa
barra doble en el contexto de este archivo y MS SQL DB local. Entonces tenemos un punto
y coma y luego indicamos la base de datos es igual a auto
reservando arriba en la puntuación db. Ahora, una vez más, aún no hemos
creado esta base de datos, pero sabemos cómo queremos que se llame
la base de datos, por lo que le estamos haciendo
saber en ese momento. Más adelante
verás que tienes conexión de
confianza es igual a true y múltiples conjuntos de
resultados activos es igual a true. Por lo que se trata de
entidades relacionadas con la seguridad para la usabilidad. solo puedas seguir adelante
y replicar todo eso. Ahora después de haber volteado
en nuestra cadena de conexión, necesitamos dejar que la aplicación
o que al inicio estés usando esta
cadena de conexión para la base de datos. Todavía en nuestra app web, vamos a jumbo
a la startup. Entonces en los servicios de configuración, vamos a registrar
nuestro hilo de contextos DB. Entonces fui a decir servicios
que agregan contexto DB. Y luego pongo en
nombre de los contextos DVI. Y como estoy haciendo esto, estoy mirando a través y
viendo que tengo un nombre aquí y otro
nombre de este lado. Entonces en realidad esto es lo
que quería que me llamaran. Lo llamé Libro de autos Up
DB context en error. Fui a actualizarlo, ¿verdad? Ningún carburador busca
el contexto DB del nombre de archivo y luego actualiza
el nombre de la clase en consecuencia. Muy bien, entonces ahora
que se hace ese refactor, me siento un poco mejor y
puedo volver aquí. Entonces los servicios dot BID, context, y la forma en que he
escrito corchetes con el nombre del contexto DB, y luego tenemos las opciones. Entonces obviamente esto realmente no está registrado lo que estamos tratando de
hacer, de ahí las líneas rojas. Entonces lo que voy a hacer es control dot. Entonces va a indicar que necesito agregar
una referencia a mi auto reserva hasta proyecto de datos. Muy bien, entonces lo tenemos en dos proyectos diferentes a diferencial
llamarán asambleas. Y en este momento el Visual Studio o la solución lo ve. Vale, estoy tratando de hacer
referencia a algo que no está en el proyecto
actual, que lo veo en
otro proyecto. Te gustaría sumar la
referencia que fui a decir que sí, por favor adelante y
añada la referencia. Una vez que haga eso, verá que este nulo cambia a
ese color que indica que sabe qué archivo es
y todo es. De acuerdo, pero entonces todavía tengo otro error que sólo
voy a controlar. Y me está diciendo que necesito
agregar una declaración de uso para Entity Framework Core para poder seguir adelante y hacer eso. No, ya no tengo más errores. Eso es agujero. Agregamos ese bit de código con las opciones
para usar SQL Server,
como dije, Entity Framework, core puede soportar múltiples motores de
bases de datos. Entonces estamos especificando que
estamos usando SQL Server aquí. Y luego estoy buscando
en la configuración. Recuerde, todo eso
se inyectó antes, el punto de configuración
get cadena de conexión. Entonces esa es una función incorporada
de la configuración. Buscaban
la conexión predeterminada. Entonces esa conexión predeterminada, y luego está
obteniendo ese valor. Entonces a cualquier cosa que puedas
haber llamado esto si no quisieras llamarlo
una conexión predeterminada para mí, quería llamar a la
carbocación hasta la conexión, sea que lo llames, solo
tenemos que conseguir eso
cadena de conexión aquí. Ahora hagamos una factura rápida solo para asegurarnos de que no
hemos roto nada para construir
fue exitoso. Vamos a seguir adelante. Por lo que el siguiente paso necesito realmente generar esta base de datos. Entonces como dije, tenemos que
hacer una migración y luego podemos realmente generar la base de datos
después de la migración. Lo que voy a hacer en
proyecto de datos una vez más, voy a saltar hacia abajo
a Administrar paquetes NuGet. Entonces vamos a buscar el paquete Entity
Framework Core dot tools. Si no lo ves enumerado aquí, listo como es para mí, siempre
puedes seguir adelante
y buscarlo. Lo veo aquí. Sólo voy a seguir adelante
e instalarlo como de costumbre. Adelante y acepta
cualquier término y condiciones y sepa
que está instalado. Permítanme simplemente darte
un trasfondo rápido cuanto a lo que estas herramientas te
permiten hacer. Si nos fijamos en la
descripción de la biblioteca, dice
que habilita a EE. UU., a
usar comandos de uso común. Tienes agregar migración, eso es
lo que estamos a punto de hacer. Ha caído la base de datos, obtener contextos DVI, cosas relacionadas con la
migración, cosas relacionadas con el
andamiaje, y migración de
scripts y
generación de comandos no relacionados. Entonces estos son todos los
comandos y estos son en realidad
comandos powershell que vamos a ejecutar usando
nuestra consola de Package Manager. Esa consola de Package Manager, si no lo estás viendo donde lo
tengo en mi
barra de tareas, una vez más, siempre
puedes ir a
Herramientas y luego obtienes empaquetada manager y una consola de
Package Manager. Muy bien, así que una vez que hagas eso, obtendrás una ventana
similar a esta, donde
te está pidiendo el comando. Lo que vamos a tener que hacer, uno es cambiar nuestro proyecto
predeterminado o un proyecto de datos porque ahí
es donde está nuestro contexto DB. Ahí es donde queremos
nuestras migraciones y todo se levanta
está relacionado con vivir. Fui a cambiar el defecto, predije un proyecto de datos. Y luego voy a decir agregar migración de
guión e incluso puede presionar Tab para
completarla por ti. Entonces voy a llamar a
esta migración inicial. Después de eso, acabo de presionar enter. Se reconstruirá el proyecto y luego estoy recibiendo este error. No problemes. Entonces
dice que mi proyecto de startup no hace referencia a esta
biblioteca, eso está bien. Este paquete es
necesario para que en el marco de
herramientas Core funcionen. Así que en realidad
nos están diciendo lo que está mal. No hay problema. Por lo que la señorita desciende la biomasa
. Vamos a arreglarlo. Vamos a hacer clic derecho
en nuestro proyecto web. Usa NuGet. Y solo estoy tratando de
mostrarte lo fácil que es conseguir estas palancas
una vez que faltan, obtiene más de lo
probable que las tenga. Entonces adelante, ve
a NuGet y luego solo
voy a pegar el nombre de la
biblioteca que decía. Una vez más, siempre se puede
simplemente buscar en el, escribiendo la barra de búsqueda. Y luego una vez que lo consiga, solo
puedo instalarlo. Cuando se hace eso. Ahora volveré a mi consola de Package Manager
y solo presionaré. Así que cuando presionas la flecha hacia arriba, te compran el
más recientemente, intentado, al menos
intento de comando. Así que sólo voy a presionar, me compren esa migración, presione Enter otra vez, y en ninguna parte
obtengo otro error. No voy a esconderme
estas detenciones porque a veces se tiende a olvidar algunos de los
pasos y es bueno ver los errores y
saber trabajar a través de ellos. Claramente estoy olvidando
algunos pasos aquí, pero eso no es problema ya el alcance del error, los
arreglaremos. Entonces éste está diciendo
que había una flecha accediendo a
los servicios de alojamiento. Y tiene que haber algún constructor que tome la configuración que
se está pasando. Entonces permítanme explicar exactamente
lo que esto está diciendo. Bach, cuando
habríamos configurado en nuestra clase startup que cada uno debería estar usando
el contexto DB. Y estaría pasando
en estas configuraciones. Entonces las opciones, más o menos
todo este objeto aquí
llamado opciones, nos
permitirían
poner en una serie de configuraciones diferentes
que queremos
ir y mantener interactuada la
base con cuando la aplicación
inicie su entidad. Es muy simple, ¿verdad? No, la única opción
aquí es que debe usar la
mezcla en cuerda. No obstante, esto no es
suficiente porque mientras estamos tendidos aplicación utilizar esta
base de datos y desconexiones, usted es este
contextos de base de datos y lineal representan la base de datos que es nuestra desconexión y cadena. Tenemos que dejar que nuestros contextos
DVI se supone que es una herramienta relativa, sean cuales sean las opciones que
estemos pasando. Volvamos a saltar a nuestro contexto DB y
crearemos un constructor. Por lo que sólo voy a leer CT OR, y presionar Tab, Tab. Y lo que tenemos que
pasar aquí
serían opciones de contexto DB. Y las
opciones de contexto DB serían una herramienta
relativa o
arranque de coche en el contexto DB. Y sólo voy
a llamarlo Opciones. Y entonces tenemos que dejar que el
bajo note que debe usar las mismas opciones base por supuesto representa o contextos DB
de la herencia. Esto está completando toda
esa jerarquía de
inyección de dependencia a la
que habría aludido. Donde cuando se
inicia la aplicación, una vez más, estamos viendo usar el
contexto DB que se encuentra en este archivo y darle
estas opciones para gobernarlo sin
lo que
acabamos de hacer con todos estos
que línea de código. El contexto DB
solo estaba sentado ahí en la-la tierra en ninguna parte
dejándote saber esto es lo que ser consciente del hecho de que
las opciones serán pasadas. Y también posible
con los contextos DB, que es la clase base que nos
da EF Core. Entonces ahora que lo hemos hecho, intentemos una vez más la migración
a puerta. Y por fin tenemos un intento de migración
exitoso. Muy bien. Ahora tenemos esta migración
inicial. Por último, como
obtendrías una nueva carpeta llamada migraciones que
puedes colapsar. Pero cada vez que
hacemos una migración o cada vez que hacemos un
cambio a la base de datos, agregando una nueva tabla
o columna o cambiando algo, tenemos que hacer una migración. El archivo de migración
generará y dirá que estos son los cambios son
estas son las cosas
que voy a hacer. Y después podemos ejecutarlos
y se mantendrá un historial. Por lo que es una buena manera de mantener un historial de todos los cambios
que se están haciendo en la base de datos. Si en algún momento hacemos un cambio y eso
no es exactamente lo queríamos no deseado para
eliminar la migración, entonces se puede ejecutar literalmente el
comando elimina la migración, que simplemente deshacer
más migración reciente. Solo un escaneo rápido
hasta lo que está diciendo
este archivo de migración. Está diciendo, bueno, tenemos una clase llamada constructor de
migración, que se está inicializando
o positon más bien. Y entonces este
constructor nos permite
crear el nombre de la tabla es autos. Así que recuerda que sea cual sea el
nombre que pongas aquí, ese es el nombre de
la mesa entrando. Por lo que está diciendo
crear una tabla con el nombre autos y las
columnas deben ser ID. Recuerda que dije
una vez que lo llames, ID sabrá automáticamente que su identidad, su clave principal. Ya está sentando todas esas restricciones en la columna
ID, cuatro filas. Y creará el año
y las columnas de nombres para nosotros. Eso está en la función. Entonces tienes un don not function, que básicamente dice, esto es lo que voy a
hacer para deshacer esto. Entonces si alguna vez hacemos ACI en lugar la base de datos y luego
el subrayado se dan cuenta, oh snap, eso no es realmente
lo que quería después de mí. Tengo que cambiar esto rápidamente. Y se quiere
deshacer la migración así
como el cambio
a la base de datos. Porque lo que sucede es que si los cambios
ya aplicados a la base de datos en este
momento este archivo
no es no existe ninguna base de datos. Este es sólo un archivo de
instrucciones para ver cuándo la base de datos
esto es lo que voy a hacer. Si ya
tienes la migración y ya la
aplicas a la base de datos, entonces tendrás que retroceder la migración antes de poder
eliminarla del historial. Este método don 't es lo que
contiene instrucciones y decir, bueno, estos son los
cambios que se hicieron. Bueno, esto es todo lo que
voy a deshacer. Entonces éste dice crear una mesa
con todas esas cosas. El Deshacer por eso
sería dejar caer la mesa. A medida que avanzamos,
veremos más de eso. Así que no te preocupes
demasiado por ello. Sé que sólo queríamos
asegurarnos de que ya
tenemos que ser excretados. Entonces el siguiente comando
que vamos a ejecutar es actualizar la base de datos. Puedes seguir adelante
y ejecutar eso. Y luego una vez que eso
ha sido exitoso, entonces podemos ir y verificar que
nuestra base de datos fue creada. Así que vuelve a tu Explorador de objetos de SQL
Server. Después expande, entra en bases de datos, y luego verá
el auto iniciando BB. En esa base de datos,
verás autos para una tabla y el
historial de migraciones de EF como tabla. Por lo que esta mesa transporta todas
las migraciones que se han
aplicado a la base de datos. Y después veremos que esta
base de datos se rellena a medida que ponemos más y
más tablas en ella.
8. Clases de datos de Scaffolding: Muy bien, entonces ahora que
hemos hecho nuestra migración, hemos creado nuestra base de datos. El siguiente
paso lógico sería
cargar la aplicación para interactuar con la base de datos. Porque, bueno, no
querrías enviar necesariamente a tus usuarios
a tu base de datos para poder gestionar el auto. No todo el mundo conocerá SQL, no todos
entenderán
cómo operar en ese entorno, por eso tenemos
interfaces de usuario, nuestras aplicaciones web,
que nos permiten realizar diferentes operaciones de una manera
más fácil de usar. Muy bien, entonces lo que
vamos a hacer es explorar
páginas completas de razón hace que sea muy, muy perfecta para nosotros
generar realmente interfaces de usuario para
interactuar con nuestra base de datos. Ya como que empezamos a construir páginas antiguas para los autos. Y lo que pasaría
es que tengamos la página de índice y
el índice suele ser la lista de autos. Y entonces tendrías el otro lo que llamar a las páginas de multitudes. Entonces C y corroer representa
crear, nuestro representa leer. Fuiste presenta actualización, y D representa eliminar crudo. Básicamente cada aplicación
que alguna vez
usarás en tu
aplicación móvil en tu nevera, sea lo que sea, todo lo que están
haciendo son operaciones crudas. Están mirando
a la vista algo. Quitarlo si no lo quieres,
cámbialo si no te gusta o va a crear otra cosa. Así corroe, ese es el
quid de cada aplicación. Entonces lo que vamos
a hacer es crear las páginas de multitud para nuestros autos. Debido a que necesitamos
poder gestionar una flota, queremos ver todos los
autos en datos BSO sobre para eliminar los
que ya no están aquí. mejor alguien cometió un error
tipográfico, quieres actualizarlo, etcétera En realidad solo
voy a eliminar esta primera página de índice
que creamos para autos. Lo que vamos a hacer es una
página de índice scuffled y nueva usando Entity Framework. Entonces lo que podemos hacer es hacer clic derecho o carpeta autos
ir a agregar una página Razor. Entonces cuando
surja este cuadro de diálogo, tenemos tres opciones. Tenemos los vacíos, un pH, que
ya miramos. Tenemos la razón por la que pgs
es el Entity Framework, por lo que usaremos ese. Por lo que este siguiente
cuadro de diálogo nos
permite decir cuál es el
nombre de la PGY1. Estamos reemplazando los bits de índice. Simplemente puedo decirle índice
entonces la plantilla preguntaría, Ok, ¿lo quieres como plantilla de
lista, editar plantilla. Por lo que en realidad podemos
andamios carga de forma o toda
la pantalla para
lo que queramos. Entonces en este caso
queremos la lista porque la página de índice, en
términos generales, tendría la lista de cualquier tipo de
datos o datos que esté mostrando. La clase más modelo
sería la siguiente. Y la clase modal
significa modelo caminado o modelo de
tabla ¿se supone que debo
usar al generar esta página? Entonces puedo decir auto. Lo haremos, lo haremos es seguir adelante y genera código para que pueda mostrar los diferentes
puntos de datos de la entidad automotriz. El contexto de datos más
por supuesto serían contextos RDB, que es donde se
irán todos los objetos de nuestra base de datos. En fin, no queremos
tener que cambiar ninguna de estas otras configuraciones y
podemos seguir adelante y golpear Agregar. Sé que me encontré con este
error que quizá no tengas, pero vamos a trabajar a
través de este árabe porque desde versiones recientes
de dotnet Core, este error ha ocurrido durante el procedimiento de andamios
y se es bueno entender al menos agujero se
puede conseguir alrededor de él. A veces es muy frustrante, pero vamos a trabajar a través de él. Por lo que hay pocas cosas
que se recomiendan. Uno, lo necesitas y sólo voy a
cancelar todo esto. Una es ir a Herramientas e
ir a paquetes NuGet,
Administrador de paquetes , lo siento,
y luego a la Configuración. Y luego vas a
limpiar todo lo que obtienes cachés. Entonces adelante y pega eso. A continuación es seguir adelante y
construir o limpiar la solución. Entonces vamos a ejecutar
una solución limpia. Y eso trajo tiene que hacer. Y luego estoy viendo que
tengo dos errores aquí. Tengo un error con respecto a las
versiones de los paquetes. Entonces eso es generalmente
lo que causa este error. Cuando los paquetes son las versiones de los paquetes
que podrías estar usando bullet necesariamente coinciden con
las versiones que el andamio o busca. No estoy seguro por qué. Esta es una de esas partes
más irritantes de ambos lo que Microsoft, el equipo de Microsoft ha estado
haciendo en los últimos tiempos. Pero solo trabajemos
a través del Alma. No, mis paquetes y
sólo voy a hacer click en el archivo del proyecto y puedo ver que mis paquetes están en 5.09. Entonces lo que voy a hacer
es dejarlos caer a 5.08. Entonces en el archivo CSV realidad
puedo simplemente
cambiar los bolsillos. Por lo que esta es otra
forma en que puedes cambiar versión
del bucket para que puedas
cambiarla aquí mismo. Pero entonces si
no estás del todo seguro de cuáles
son los números de versión, no hay problema. usaremos que
obtienes para la siguiente. Por lo que siempre
puedes bajar
al nuevo gestor de paquetes get
in para ese proyecto en sí, mira las versiones instaladas, y luego verás
qué versiones tienes. Y luego puedes
cambiar esa versión. Por lo que solo dejaré caer la versión
2.08 y luego haga clic en Actualizar. Por lo que solo se puede hacer eso para la finalización del núcleo dotnet y paquetes de
diseño para
el Entity Framework. Después de haber hecho
esa operación, veo que he
construido con éxito. Entonces voy a probar de nuevo
el andamio. Voy a hacer clic derecho
autos tenían página Razor y luego pagina usando Entity
Framework y
simplemente llenamos las mismas cosas
que acabamos de llenar. Entonces plantilla de índice es lista, clases de
modelo, auto, y
luego adelante y pulsa Agregar. Está bien, es como si fuera
otra área. Éste al menos es un
poco más informativo. Dice que hubo un ganando el
generador de código seleccionado para regañar, instalar este bolsillo en particular. Entonces bien, no hay problema. Vamos a seguir adelante y seguir las instrucciones.
En el fondo. Se puede ver eso y se
llega a realmente empezar instalar ese mismo bolsillo. Voy a probar
esto una vez más. Esta vez tenemos levantamiento. Entonces no sé que eso fue todo un ciclo de tratar de
conseguir un trabajo distinto. Una vez más, sucede cuando se
publican ciertas versiones, pero el mecanismo subyacente
en Visual Studio
no se ha actualizado para
saber que esta es la versión de la biblioteca,
se debe utilizar. Por lo que podría tener un poco de ida y
vuelta con eso. Y como dije, no
hay muchos recursos en línea para guiarte
exactamente qué hacer. Esos pasos, en términos generales, funcionarán para ti. Pero
con lo que terminamos es archivo índice. El archivo de código. En el valor del índice,
se ve que se ha generado mucho HTML para nosotros. Y en el archivo de código
verás que también se
ha creado alguna cantidad de C-sharp para nosotros. Entonces discutamos brevemente
lo que está sucediendo aquí. En el fichero índice. Empecemos con un
archivo de código porque eso está en la lista. Mira lo que estamos
viendo aquí es inyección. Entonces recuerda que hicimos forma de inyección de dependencia antes con un archivo de config porque la config tiene
algo que queríamos. No queríamos crear
una instancia completamente nueva
del archivo de configuración cada
vez que queremos algo. Así que en cambio estamos tomando
esa copia compartida que estaba registrada en la aplicación para ser
compartida entre todos. Entonces, en esencia, cuando
habríamos ido a nuestra clase de startup y
registramos contextos RDB, ya
estábamos empezando a compartirlo a través de la aplicación, convirtiéndola
así en un
candidato a inyección en cualquier lugar que queramos. Entonces esto somos nosotros inyectando
una instancia o inyectando la versión esquilada
del contexto e inicializando nuestra propia copia
privada en este fichero. Eso es
inyección de dependencia en uno-a-uno. En cualquier momento que quieras hacer inyección de
dependencia
va a verse algo como esto y puedes inyectar
múltiples cosas como a voluntad. Entonces no te limitas a una
sola cosa a la vez. Ahora que tenemos el, en el contexto
inyectado en nuestro índice, lo que estamos haciendo
aquí es crear un objeto de lista de tipo auto, por lo que es sólo una
colección de auto. Muy bien. Deberíamos llamar realmente a esto autos. Así que sólo voy a llamar a este
autos porque es una lista. Y tiendo a ponerme muy
específico con mi nomenclatura, al
menos que lo pluralizo. Si es singular,
entonces es singular. Por lo que puedes renombrarlo para
usar puntos de Control y permitir que refleje hasta que todas las demás
referencias para ti. Y entonces lo que tenemos está por conseguir. Entonces recuerda lo que discutimos
cuando se carga la página. Tenemos el encendido, vamos, llegar aquí está siendo despedido. Una vez que navegamos a
esta página de índice, se va a
llamar automáticamente a este método. Este método configura cualquier dato o lo que
necesitemos para la página, igual que hicimos
con la config e inicializando nuestras variables
en el ejemplo anterior. Entonces aquí estoy diciendo que mi lista actual de autos
debe ser igual a. Y luego vamos
a esperar los resultados de llamar a la mesa contextual dot cars y
conseguir todos los elementos. Entonces este es el clásico
Entity Framework. Entity Framework nos
da acceso a la base de datos mediante
este archivo de contexto. Cualesquiera que sean las mesas que
declaramos, porque recuerden ,
autos, ponemos autos
ahí, eso es nuestro. Eso es todo lo que está haciendo. Está diciendo contexto,
dame los autos. Y entonces la forma en que funciona
Entity Framework es que esto es lo que
llamamos método de ejecución. Está viendo lista asíncrona significa que realidad me dan todo
en la tabla como una lista. Y luego estamos
almacenando esa lista en nuestra variable local o
propiedad llamada autos. Después de todo eso se hace y se ha configurado
la página, saltemos a
nuestro HTML real. Entonces en la página HTML real, sabe que es
una inexperiencia, dio su
índice de no nombre encontró que todas esas pequeñas cosas son
porque llamamos el índice de pH. Llegamos al botón
Crear nuevo de cortesía, ¿verdad? Por lo que tenemos un enlace
al crear nuevo. Por supuesto que esa página
aún no existe, pero eso está bien. Obtenemos una tabla, y esa tabla tiene una cabecera o una sección de cabecera
con las filas de encabezado. Por lo que tenemos el encabezado de la mesa para el año por delante,
permitirnos el nombre. Entonces tenemos otra columna de
cabecera de tabla que está vacía. Y luego para cada
artículo que entró, el modelo dot car, modelar autos, esa
es nuestra lista de autos. Y luego estamos usando eso
para que cada bucle pase por cada ítem en esa lista
de autos que estamos viendo. Dame un display para el año, dame un display para el nombre. Y en esa tercera columna
que no tuvo ningún golpe, que podría haber
llamado a estas acciones, tal vez lo
que hay en esa tercera columna, dame tres enlaces
querían editar, querer eliminar, y uno, sólo ver los detalles. Y cada uno
pasará por encima de esa identificación. Recuerde, el ID de clave principal, Eso es lo que
identifica de forma única una columna en la base de datos o ese rol en
lugar de la base de datos. Y luego solo estamos
atando eso al botón que cuando hacemos clic
en Editar en cualquiera de estos roles, sepamos qué ID vamos a ver. Solo echemos un
vistazo rápido a lo que se generó para nosotros. Aquí está nuestro pH. Esta es nuestra nueva página. Vemos aquí que tenemos
algo parecido a una mesa. Si no estás familiarizado
con todas las mesas, mira en Bootstrap, entonces eso es realmente lo que
van a parecer. Pero tenemos la tabla, tenemos la columna para ti, tenemos nombre, y luego tenemos esa columna vacía la cual
va a tener los enlaces. Lo que no tenemos son datos. Sí, tenemos la página que tenemos arriba que Create New button
up top that index flood para que podamos empezar personalizar esta página
a lo que queremos. En lugar de ver índice arriba arriba, podemos decir contrata lista de autos. Eso es básicamente lo que tuvimos última vez cuando hacemos eso y vemos si lo vemos
refrescarse y cambiar. Muy bien, entonces lo
que no tenemos sería crear nuevo. No tenemos ningún dato
y tampoco tenemos ninguna de las otras páginas. Cuando hacemos clic en Crear nuevo, solo va a
recorrer porque
no hay página para crear una nueva, volvemos, lo que
vamos a hacer es crear un
repositorio de GitHub para este proyecto. Y luego podemos seguir
desarrollando nuestras características.
9. Añadir proyecto a GitHub: Muy bien chicos, Así que estamos de
vuelta y lo que vamos a hacer en esta lección
es sentarse o repositorio de GitHub
para nuestros proyectos. No, GitHub, hemos
pasado por esto. Es herramienta
o plataforma muy, muy útil para guardar una copia de nuestro proyecto uno y mantener la historia
de nuestro proyecto. También nos
permite colaborar con nuestros compañeros o amigos
en un proyecto muy fácilmente. Museo Studio, microsoft
compró GitHub hace años y desde la integración entre las
herramientas de Microsoft y GitHub, es decir visual Studio y
ya viste Visual Studio Code. Esas integraciones realmente han madurado y se han vuelto muy,
muy, muy poderosas. Entonces vamos a ver cómo
podemos enviar toda la información de nuestro proyecto usando Visual Studio a GitHub
y en mantenerlos sincronizados. Por lo que es realmente simple
hacer eso. Lo que podemos hacer es simplemente mirar en la esquina inferior derecha
de nuestro Visual Studio. Y veremos este
botón que dice Agregar al control fuente. Para que siga adelante y haga clic en
eso y verá obtener. Así que ponte a instalar en tu máquina automáticamente cuando se instaló
Visual Studio, si no estaba ya
instalado desde cuando hiciste este ejercicio
usando Visual Studio Code. Pero no, dirán crear un repositorio Git y
configurarán el repositorio local. Y luego también te permitirá
crear el
repositorio de GitHub fuera de la caja. Así que si no estás diciendo
No siguió adelante e inicia sesión, probablemente
te
pedirán que ingreses con tus credenciales de GitHub
este punto. Pero luego a partir de aquí, puedes indicar que quieres un repositorio privado y
eso está bien por ahora. Puedes dejarlo como privado
de realidad se dio cuenta que cuando desmarques esto a menos que
arreglen comprador a granel, no, pero no lo crearía en GitHub si no lo
hicieras privado, no enteramente seguro por qué, pero siempre se puede
volver atrás y
cambiarlo a público si así lo desea. Lo dejamos como privado. No tenemos que poner en una
descripción ni nada más. Y nos están diciendo cuál será
el tweet de URL. Para que puedas seguir adelante y hacer click, Crear y empujar y
darle unos momentos. Y no conseguí ninguna abierta indica que estaba terminada. Pero si miro en la esquina
inferior derecha, estoy viendo que
el botón para decir add ya no está ahí
en lugar de camino centímetro, me está diciendo que
tengo una rama maestra. Va a ser lo que
llamamos el control remoto. Recuerda, habíamos
configurado ese remoto, que básicamente tiene ese enlace
al repositorio remoto. Tiene
cambios pendientes y compromiso que podrían estar en empujado
saber en recursos. Verás que todos los archivos
del hub null
del Explorador de soluciones, pequeños candados, estos lotes de botones indican que la versión que
está en tu máquina no
ha cambiado desde la
última actualización de la servidor. Entonces si entro y encuentro con algún ajuste y solo
haré un ligero ajuste
a este expediente. Entonces verás que se
deshace de esta garrapata roja. Significa que sí, este archivo
ha sido modificado y tenemos otro panel
llamado buenos cambios. Si no es donde
está en mi pantalla para
ti, siempre puedes ir a View y
verás buenos cambios. Muy bien, así que una vez
que abras conseguir cambios, te mostrará
los archivos que se cambien y esperando
estar comprometidos. Por lo que tiene su mensaje de confirmación, por lo que sí dice archivo de índice
modificado. Entonces la forma más fácil de hacer
esto sería comprometerse todo y ver lo que esto
hace es empujar y tirar. Enviará sobre tus
cambios y pullover algún nuevo cambio que
pueda haber ahí? No. Hay
situaciones en las que podrías
terminar en conflicto con
tu colega, lo que significa que hiciste un cambio
a esta página de índice. Él o ella también hizo un
cambio a esta página de índice. Y luego uno de ustedes se registró
antes que el otro. Entonces cuando estás revisando tu versión modificada
de la anterior, GitHub se está dando cuenta de
que la versión que tiene
es diferente a la
versión que te dio por última vez. Y entonces eso
causaría un conflicto. En ese punto, tendrás que hacer alguna gestión
y resolución de conflictos. Podemos discutir que más
adelante a medida que crece un proyecto. Pero retinal esto,
sólo manténgalo
lo suficientemente simple para saber que
podemos crear o repositorio para
cambios sincronizar y cuando hagamos compromisos
y verás que
lo va a comprometer
localmente y luego sincroniza los commits
locales con un GitHub commits derribar
automáticamente cualquier cosa que no tengas
que esté actualmente en GitHub. Entrada real. Eso es lo fácil que es
codificar como grupo. Así que cada uno de ustedes podría iniciar sesión
fácilmente en este
proyecto en GitHub. Te voy a mostrar
a través de Colón Maya. Entonces aquí está el carbo
King up que se acaba de crear hace un minuto. Ahí está el pollo que
acabo de hacer archivo de índice modificado. ¿ Verdad? Nadie es privado y dos de ellos la única persona. Entonces si quería Bueno, mantenerlo en privado
pero compártelo, entonces eso es tan fácil
como
ir a la configuración, entra en Administrar acceso. Podrían pedirte que
confirmes quién eres. Y luego después
de confirmar quién eres, entonces puedes invitar a
colaboradores. Invitar a colaboradores
es tan fácil como escribir nombre de la persona. Así que tengo otro, estoy tratando de defender
mi otro YouTube, un cono para poder simplemente
demostrar cómo se ve eso. Pero en realidad puedes
simplemente buscar el nombre de usuario de ese arte de ráfaga. Solo estaba lidiando con nombres de usuario
aleatorios. Simplemente puede encontrar el
nombre de usuario de otra persona, seguir adelante y agregar. Y entonces
aceptarían la invitación, y luego podrían también empujar y
tirar del proyecto en orden,
digamos a tirar del proyecto en orden, la nueva
persona en el equipo, o incluso si perdiste tu código, veamos, tu máquina se estrelló. Necesito perder su proyecto local y necesitas
recuperarlo de GitHub. El mismo trámite
que alguien que se acaba de sumar
al proyecto y necesitan una copia
local para empezar a trabajar. Todo lo que realmente tienes que
hacer es ir al código. Y luego se verá
abierto con Visual Studio. Una vez que hagas eso, se abrirá Visual Studio
en tu máquina. Entonces indica que puedes
clonar desde el repositorio. Entonces esta es una ubicación de repositorio que es la URL para la orilla de GitHub. Este es tu pasado local. Ahora se está mostrando rojo porque
ya tengo ese camino local. Ese es un proyecto en el que
estamos trabajando. No. Así que una vez más, si
fuera nuestra primera máquina, entonces no
tendrías este problema. O si fuera la primera vez
que estás recibiendo este proyecto, no
tendrías ese
problema con el camino. Incluso si ya
tienes el proyecto, todo lo que tienes
que hacer es cambiar tan rápido y tiraría a una carpeta diferente
si realmente quisieras una copia. Después de que signifiques dónde
querías clonar localmente, solo tienes
que hacer clic en Clonar entre
Visual Studio y GitHub. Todos los archivos de proyecto que se
han subido
hasta saber
serán descargados a
su máquina y sincronizados y luego
podrás empezar a trabajar. Entonces así es lo fácil que es para los equipos empezar a colaborar. Si quieres hacer público
todo el proyecto. Serrano es privado, es
decir si esta URL y yo tratamos de crecer
traje y simplemente
abriré una nueva ventana de incógnito. Si traté de crecer traje,
llegaré a un 404. Técnicamente no existe frente a uno de mis proyectos
públicos. Déjame simplemente encontrar uno
que yo sé que es público. Si fueras a obtener esa
URL y navegar a través de ella, entonces mostraría que cualquiera puede navegar a
repositorios públicos en GitHub. Pero una vez que es
privado, nadie puede, cuando estás trabajando
en tus serios predice los proyectos de
creación de dinero, no
quieren compartir
tu propiedad intelectual con sharp, hacerla privada. Pero entonces en el verdadero significado de código
abierto y
colaboración y cizallamiento, entonces probablemente quieras tener algunos proyectos abiertos porque
entonces eso también puede duplicarse como tu portafolio para
tus pretendientes o tus futuros empleadores Cuando
querían ver qué tipo de proyectos has
hecho y simplemente hacerte una idea general de
tus habilidades. En general, GitHub es
una herramienta maravillosa para conocer gente nueva, ya
sabes, mirando lo que otros desarrolladores podrían estar haciendo. Puedes seguir a la gente. La gente puede
seguirte mientras publicas. La gente puede iniciar
tus repositorios o hacer sus propias copias de
tu código porque tal vez
estás haciendo algo
que
alguien más está interesado en hacer y lo que estás haciendo está
medio hecho, puede ayudarles. En el verdadero significado, una vez más, están saltando a la
comunidad de código abierto para la colaboración. Eso es lo que GitHub
trae a la mesa. Así que adelante y lo que vamos a hacer es hacer
shorts o un cono. Entonces cada vez que consigamos una
pieza de funcionalidad en, estaremos sincronizándonos con el repositorio
porque una vez más, nos dará la
historia de todo. Entonces si cometemos un error y
algo deja de funcionar, siempre
podemos retroceder
a la versión anterior. Lo que no quieres
hacer es dejar demasiados cambios entre las versiones que
estás registrando.
10. Agrega crea una página de Create: Hola chicos, bienvenidos de vuelta. Entonces ahora que tenemos una idea
de cómo podemos generar el código para ver los autos
o cualquier detalle en cualquier tabla. Más o menos lo que podemos
hacer es continuar por esta línea y pescar todas las actividades
de la multitud. Así corroe una vez más
ya que estamos creando, leyendo, actualizando, y eliminando. Por lo que en este momento tenemos una de las opciones rojas en
forma del índice, pero no tenemos datos en la
base de datos. Tenemos dos opciones. Podríamos entrar en la base de datos, poner en el registro,
pero por supuesto, al darse cuenta o no
estaría haciendo eso, no
estaría alentando a
nuestros usuarios a hacer eso. Entonces en cambio, lo que
vamos a hacer es continente para pelear
con todas las páginas. Y el siguiente es la página Crear la
cual clínica los de
la base de datos permite usar la interfaz de usuario en nuestros datos y luego tenerlo
visible desde el índice. De la misma manera que
generamos el archivo de índice. Sólo vamos a ir a
hacer clic derecho en autos, añadir página Razor. Y voy a hacer otra página de resultados
con Entity Framework. Ahora, una vez más,
solo podías manchar todos estos, pero yo quería
hacerlos uno por uno para que
podamos evaluar los diferentes bits de código y sostener que todos se
juntan para darnos la funcionalidad crud
completa. Así página de Razor usando
Entity Framework, fui a agregar ese. Y esta vez
voy a hacer un Create. Estoy nombrando a la página crear. El modelo queda que lo
crea nos dará un formulario o una
clase de modelo será nuestro auto. Y podemos dejar el estrés del contexto de
datos, seguir adelante y golpear Agregar. Y genera nuestras
peleas esa página para mí. Entonces obtengo el
fondo pitch así como el archivo de código que estamos
acostumbrados a eso ahora, solo recuerda que si
te dan algún error respecto y no
poder andamiar, acabamos de pasar por esa
actividad con el índice. Entonces entre las lecciones, es posible que te hayas
inclinado a actualizar tus paquetes NuGet y luego eso probablemente provocaría alguna desconexión con una scuffle más antigua. Entonces si estás recibiendo ese error, simplemente retroceda a la versión anterior o una versión antes de la
de tu nula en. Y vuelve a intentarlo. Y a medida que arrastra y si
sigues consiguiendo el área, solo mantén en
andamios pliegues o soltando la versión del paquete NuGet
e intentando scuffled. Por lo que ahora evaluemos lo que
obtuvimos a través de esta riña, la actividad para
la página Crear. Tenemos nuestro código detrás de archivo, que siempre fueron una
clase heredando, heredando del modelo Page. Y luego tenemos nuestros
contextos siendo inyectados en. Entonces en conseguir, solo está
diciendo devolver el pH. En otras palabras, no tenemos
nada que necesitemos cargar
necesariamente para el Create, así que no tenemos que ir y Fitch ningún dato para mostrar
el formulario porque
solo van a estar mostrando
un forma vacía al usuario para que
realmente creen un registro. Entonces el inicio está vacío, no
hay nada que
volver aquí, eso está bien. También tenemos esta
propiedad llamada tarjetas. Entonces tenemos coche público y es
un objeto del tipo auto, y luego tenemos
comprando propiedad. Entonces la propiedad bancaria
aquí básicamente le dice la página Razor que en el formulario, sea cual sea la entrada que se dé para cualquier propiedad que esté
dentro de esta clase, debe verla. Una vez que se presente, entonces va
a golpear ese puesto. Cualquier cosa que esté deshuesada, se va a observar para
que cuando golpeemos el post realmente
raspe todos esos datos, haciendo coincidir datos para las
propiedades del automóvil desde el formulario. Y así podemos
procesarlo en eso on post. Aquí primero verificamos si
el modelo es válido. La validez del modelo puede ser una serie de cosas basadas en
qué datos estamos pidiendo. Por lo que en el caso de
crear un automóvil, sería absurdo a un bajo, un auto que se entrara sin
un año y con nombre OTA. O al menos tal vez el nombre
sea lo más importante. El oído podría ser opcional. Por lo que definitivamente
querríamos
asegurarnos de que al menos el nombre esté presente antes intentar enviar algo
más de dos la pieza de datos. Para que si
el estado de los modelos es válido aquí, básicamente ¿eso
comprueba para que
veamos cuáles son las reglas de
validación? ¿ Son emiten si no, simplemente recargar la página. Te voy a mostrar
en unos segundos. Sostenga que se traducirá a cada uno mostrando
lo que le pasa. Pero si no es válido, simplemente recargue la página. De lo contrario, lo que
sucederá es que
irá al contexto de la base de datos, vaya al establo del auto y
sumará el nuevo objeto de auto. Vean que esos son los
mismos objetos que dijimos Ben propiedad cuatro. Y luego después de
eso guardará los cambios. Entonces eso es todo funciona Entity
Framework. Dice uno, diciéndome qué mesa y dime
qué querías hacer. Entonces en este caso, queríamos
sumar y queremos sumar un auto. Y luego una vez estamos
incrementando los datos, es decir dónde agregar algo, eliminar algo,
actualizar algo. Una vez que estamos cambiando
algo sobre los datos, tenemos que llamar a guardar cambios. Ahora te darás cuenta de la espera. Cuando haga doble clic, espero, verás que hay este
otro título llamado fregadero. Entonces en la programación asíncrona, vas a ver
mucha de esa tarea asíncrona fuera del tipo en que
realmente resulta. Observe que el inicio es
sólo i resultado de oxígeno. Éste es resultados de acción de tarea porque es una función
asíncrona. El motivo por el que es asíncrono
es que está haciendo una
llamada a la función asíncrona al contexto. Por lo que sí tiene una versión
no asíncrona. Simplemente guarde los cambios. Pero
entonces eso requeriría que hagamos algunos cambios en nuestro
método y todas estas cosas. Pero si generó
eso para ti, siempre va
a intentar darte el código más eficiente
basado en lo que sea capaz de hacer. Entonces es por eso que estamos obteniendo
las versiones asíncronas de estos métodos después de que haya guardado los cambios y
todo está bien, entonces redireccionamos
al índice de página es incluso el
código generado sabe que debería estar buscando
una página llamada Index. Esa página de índice estaría aquí mismo en el
mismo nivel que crear. Después de
que todo esté hecho, solo redirigirá
a la lista y
verás tu recién creado
un registro en esa lista. Ahora echemos un vistazo rápido al archivo HTML que
se generó para nosotros. No es mucho, es un formulario pequeño porque
la tabla no tiene tantos registros para lamentar
que muchos campos para llenar. Lo que conseguimos, obtenemos
uno, conseguimos el auto. Si en realidad pudiéramos simplemente rediseñado
esencialmente crear coche. Esa es nuestra etiqueta H1, quita esa H cuatro. Y luego tenemos
algunos divs Bootstrap. Tenemos un div con una
clase llamada regla, y luego ahí tenemos
una clase llamada llamada MD4. Entonces eso significa que está tomando
cuatro columnas en la regla. En Bootstrap, el
sistema grid es tal que puedes crear una regla y
luego puedes tener col, dash un número lo que
tienes hasta 12. Por lo que puedes tener tantos
divs de llamada en lugar de una fila de hasta 12. Entonces podrías tener
12 unos o tres
, cuatro o cuatro tres. Muy bien, puedes mezclar tanto y simplemente no elegir
tener ninguno, correcto. Entonces si quería
formar distrito justo al otro lado de eso lo que he visto desde la sección HTML de este curso cuando
acabamos de crear el formulario, le
dimos todas las etiquetas de
formulario y así sucesivamente un estirado lo más
ancho posible, entonces no tendría que
especificar ningún col md. Para que puedas experimentar con eso. Mira la documentación para las diferentes
mediciones de columna, y podemos experimentar con eso y ver
cómo se ve eso. Pero lo más importante
es nuestra forma. Entonces en la forma
tenemos este div que dice AASB guión
resumen de validación en solo modelo. También tiene otro
modo que ve todo. Muy bien, Así que a veces
tiendo a sólo cumplir con eso todo. A veces te encanta el modelo solamente. Eso está bien. Quiero decir, verás los beneficios
de uno y no del otro, aunque es más global. Por lo que solo te
recomendaría que uses todo cuando tengas dos. Entonces le damos una clase
con tics peligro. Esta sección de la página
realmente se llena con cualquier error de validación
que estuviera presente cuando dijimos si el
estado del modelo no es válido, devuelva el pH, por lo
que eso es automático. Por lo que el estado modelo es en realidad
camiones para ver, bueno, Este es el modelo entero
y esto se está deshuesando. Cuando se ingresan datos
y en Post, se va a camiones todos
los datos que se
ingresaron aquí a través del formulario. Verás que
tienes dos entradas. Uno para mi auto dot año. No quiero poner nombre de punto para que consigamos la etiqueta,
vamos a obtener la entrada, y luego obtenemos el spun con ese mensaje de validación
siendo incorporado. Por lo que dos lugares, los mensajes de
validación se mostrarán debajo la entrada y en la parte superior
del pH en un resumen de gen. Siempre que se publica
un cheques, ¿era válido? Si no, regresamos a la página
cuando recarga esa página. Entre el resumen de validación y estos
tramos de validación, veremos todos los
textos que
indicarán por qué algo no
fue votado. Lo que voy a hacer es darle la vuelta a
esto
porque es nuestra granja. Se generó para nosotros lo
que podemos cambiarlo propio. Entonces fui a poner este
grupo de formularios por un nombre por encima del año. Esta cosa que fluye más. Es poner el nombre del auto
y poner el año. Eso es opcional en este punto. Y luego tenemos el botón
Crear debajo con la clase BTN
será diez tablero primario. Y incluso se puede extender
este sentido que btn bloque, se extiende a la derecha
a través de toda la página. Entonces tenemos nuestra lista
volver al botón Lista. Entonces si la persona llegó
tan lejos e inicia, vale, ya no quiero
crear el auto. Siempre pueden simplemente
dar vuelta a la lista, volver al índice. Debajo de todo eso hay
una sección para los guiones. Y lo que pasa es que todo
este flujo de trabajo de validación
que acabo de describir, es realmente una
combinación de nosotros agregando reglas de
validación y estoy a
punto de mostrarte
cómo funciona eso. Y algunos parciales o lo sentimos, son algunos guiones los que
se renderizan en la página. Este bit de código, esto es renderizando
async parcial para scripts de validación. Si miramos en la carpeta compartida, entonces verá que los scripts de
validación de guiones de subrayado
parciales exactos parciales. Ahí está. Y si miras en ese parcial, verás que todo lo que tiene dos etiquetas de script para
jQuery dot validar. Entonces a las bibliotecas jQuery, que vimos en orden www roots. Sólo estoy tratando de mostrarte cómo todo está
interconectado aquí. Tenemos el jQuery validar, cómo el jQuery
validar en molesta. Entonces tenemos esos, acabamos de crear un parcial o
el marco generó este parcial para nosotros que automáticamente
tiene referencias a eso. En cualquier momento se
generará un formulario para usted o incluso si crea
su propio formulario. Más adelante, estaremos
viendo cómo puedes crear tu propia granja desde
cero o tu propia página, entonces en realidad
puedes usar este bit de
código para obtener ese tipo de flujo de trabajo
de validación en todas las partes cuando
queríamos decirle qué campos son válidos o lo sentimos, se debe
validar y en contra qué reglas tenemos que pasar
al modelo real que
se está utilizando o a la entidad real. Poner estos atributos
son anotaciones de datos es tan
simple como ir por encima del campo al que desea que se aplique
la regla. Y luego usando corchetes y luego veremos requeridos. Entonces esa es nuestra primera
regla que está diciendo que en cualquier momento
se supone que los datos se ingresan contra cualquier página
que se modele fuera coche o cualquier forma modelada fuera de auto. El campo nombre es obligatorio. Ese es el paso número uno. ¿ Qué otras reglas podríamos tener? También podríamos querer decir que es longitud de cadena debe ser, y luego podemos ver una longitud
máxima de tal vez 50. Por lo que ningún nombre del automóvil debe superar los 50. Déjame poner eso a 150. Y entonces podríamos decir que si no
llega a superarse, queremos un
mensaje de error de mi nombre. Es el nombre es demasiado largo. Algo que también podemos
establecer una longitud mínima para que la persona no
pueda entrar nada con un personaje,
ya sabes, cosas así. Así que en realidad puedes simplemente ensancharlos a lo largo
justo encima del campo. Ahora, poner estas reglas en
contra de la entidad deudora, porque esta es la
entidad real que se está utilizando para generar la tabla como
vimos cuando agregamos un conjunto DB. Agregamos nuestra migración. Cuando los ponga aquí, en realidad
voy a estar
afectando la base de datos. Entonces si genero otra
migración en este punto, y sólo voy
a generar una. Hago
reglas de validación, presiona Enter. Y cuando hagas eso, recuerda
siempre cambiar el proyecto predeterminado
al proyecto de datos. Pero una vez hecho eso,
entonces se puede ver aquí
que los bienes una columna de
altar poco de sintaxis. Aquí está diciendo alterar
la columna con el nombre, nombre porque esa es
la que
acabamos de establecer las reglas anteriores. Entonces el tipo sigue siendo, el tipo es int varchar 150. Entonces antes de que fuera
en var char marks, tenga en cuenta que mientras que sentado como limitación de longitud de
cadena, va a
cambiar el tipo de datos en la base de datos para saber que incluso entonces no puede
almacenar más de 150. ¿ Está bien? No, ya no es inaudible porque ahora lo hicimos requerido. Entonces antes de que fuera cierto, no
era un azul. Podríamos haber levantado MTU. La base de datos
no tendría ningún problema. La propia base de datos con rechazarla
activamente. Si es nulo, entonces si no se proporciona nada, le dará una
cadena en blanco como valor predeterminado, pero no puede ser nula. No obstante, por el lado del cliente, ni siquiera aceptaría la cadena en blanco
porque se requiere. Entonces cuando vayamos a probar o
formarnos en la página de índice, voy a golpear Crear Nuevo
y luego tenemos nuestros formularios. Entonces por la llamada MD4, ves que sólo
se está estirando hasta cuatro. Lo que podemos hacer,
solo explora esto. Sólo voy a inspeccionar elementos que podemos
jugar con este ancho. Si hiciera eso llamado
MDA ocho por ejemplo, se estiraría
a ocho veces. Entonces, ¿de dónde vemos el EHR? Líneas que se extienden
de izquierda a derecha, eso es tan anchas como
las 12 columnas. Entonces sé que va a estar
tomando ocho de los 12. Si no especificara un ancho, entonces eso es lo que se
vería. Sería una especie de diminuta. Entonces si quisiéramos que se
extendiera completamente y entonces
podríamos decir col md. Así que sólo voy a hacer
eso aquí, es igual a llamadas. Entonces esta es una forma agradable y
sin fisuras de probar cómo se vería antes de
cumplir con el cambio de código. Así que en ninguna parte ver
llamado llamado dashboards. Por lo que se puede decir col
dash AMD, T12, lo que significa en una pantalla de tamaño
mediano, T corp dot size. O si solo quieres
que sea universal en cada pantalla y ocupe ese tamaño de
modo o no mathspace, solo
puedes decir que col dash T2
se llaman dash el número. Entonces aquí vemos que se está estirando en última instancia de izquierda a
derecha en la medida de lo posible. Y luego tenemos
nuestro botón Crear, que es btn block. Si acabo de tratar de
crear este punto. Ahí vamos. Estamos viendo
nuestra validación funcionando. Así que en ninguna parte obtenemos ese resumen de
validación en la parte superior y
luego estamos recibiendo los mensajes de validación a continuación. No, no le dijimos campo
del año que se
requería con base en nuestras reglas. Lo que voy a explicar por qué
vas a ver esto. Entonces es bueno
entender estos matices con todo el plato válido encendido y qué campos se validan
automáticamente, por así decirlo. Porque el año es un entero
y no un int anulable. Entonces por defecto, cuando
ves int en C-Sharp, significa que nunca
puede ser nulo. ¿ Está bien? Entonces nano significa vacío. Pero entonces un int
nunca puede estar vacío. Un int siempre va
a predeterminado a 0. Entonces eso significa cuando nos sometemos justamente ni
intenté someter alguno, si es modesto es válido. No fue válido porque el entero no
obtuvo un valor en absoluto. Ni siquiera consiguió el 0. En lo que se refiere,
es inválido. Entonces si hubiera puesto un 0 ahí, el
mensaje de validación desaparece. Si traté de crear, está satisfecho tanto como 0 no
es un año válido para nosotros. Ceros un valor válido en
comparación con null para un entero. Solo estoy tratando de explicar todos los diferentes tipos de
datos podrían tener su propio tipo de validación
en función de la retención. Trabajan en C-Sharp. Pero en última instancia, si
no pongo nada ahí, va a decir automáticamente solo, bueno, se requiere. Si traté de crear,
no irá más allá. Y si quieres más pruebas, solo
voy a poner
nuestros puntos de quiebre justo en esta línea donde
comprueba, ¿es válido? Hacemos clic en Crear, va
a golpear ese punto de ruptura. Bueno, no va a golpear el punto de ruptura saber debido a que la validación está observando activamente. Así que déjame seguir adelante
y crear auto. Esto está en realidad en mi viejo auto. Hermoso GAR,
adelante y pega Crear. Y como aún no hay errores de
validación activos, lo que tenemos es esta comprobación
para ver el estado del modelo es válida. Es válido. Esto está diciendo si no es
válido, entonces volver a pagado. Entonces como es válido, va a seguir adelante y
agregarlo a la base de datos. Sólo voy a
quitar este punto de ruptura, golpear F5 para dejarlo continuar. Y luego hace eso
redirigir a la página de índice, que luego ejecuta la
consulta para ver y meterme todos los autos en la
base de datos y mostrarlos. Así es como todo
está interconectado. Entonces voy a tratar
de hacer otro crear. Y sólo voy a
poner este punto de ruptura, solo toma y ver
qué está pasando. Vamos a hacer clic en
Crear y verás que ni
siquiera llega al punto de ruptura
porque del lado del cliente se está negando activamente porque las
reglas de validación en realidad están configuradas para el campos basados
en las reglas que nos sentamos. Si resalta o inspeccionamos
el cuadro de texto para el nombre, vemos aquí que tenemos
datos Val es igual a true. Por lo que todos estos son
generados por el JavaScript. Entonces entre nuestras reglas que
configuramos en C-Sharp y las bibliotecas JavaScript
en el cliente dijeron que todos estos atributos
se agregaron al text-box. Entonces los datos Val
es igual a verdadero significa
que se supone que debo hacer
validación de datos en este campo. Los datos de longitud. Eso significa que el error
basado en la longitud, es el mensaje de error
que habíamos escrito. El máximo es de 150. Entonces todas las pequeñas
reglas que habíamos establecido, verás siendo aplicadas en los foros
de atributos aquí. Y no teníamos
este código extra. Y si
miras hacia atrás nuestro archivo HTML, sigue siendo el mismo isquio. No lo escribimos y no ha modificado el propio archivo. Todo esto se está haciendo sobre la marcha cada vez que se cargará la
página web. Que hemos hecho, todo el, lo que vamos a
hacer es sólo actualizar la base de datos porque acaba de
crear una nueva migración. Y eso es algo
que vamos a estar haciendo mucho cada vez que
hagas un cambio a una
de las clases de entidad, una, haces una migración donde documentará qué
cambio tiene que suceder. Y debes quitar
la migración, qué engaña y hay que
deshacer o cambia. Y luego después de hacer
la migración, volvemos y
decimos actualizar la base de datos. Por lo que en realidad puedes usar tab. Si escribe algunos de
ustedes para hacer es presionar Tab para terminar el resto de la
misma actualizar la base de datos. Y si todo va bien,
ya verás hecho. Ahora, hay momentos en los
que puede recibir errores. A lo mejor algunos de los
cambios que quieres
aplicar pueden entrar en conflicto con algunos de los datos
que ya están ahí. A veces eso sucede,
pero como dije, cada vez que surjan estos errores, vamos a trabajar a través de
ellos juntos. Para que puedas tener una buena idea de cómo solucionar
algo. ¿ Se debe subir? Cuando volvamos,
seguiremos con nuestra aventura de código. Por lo que ahora tenemos el Crear, tenemos la r, Así que tenemos la c, tenemos la R en
forma de esta página de índice. Y luego podemos
hacer la edición a continuación.
11. Agrega una página de aviación: Muy bien, bienvenidos de vuelta chicos. Así que ahora estamos en
nuestra nueva actividad, que es
configurar la página de edición. Por lo que las ediciones serían
la actualización bruta de la ONU. El tiempo que vamos
a editar algo, básicamente
estás haciendo
actualizaciones a los datos existentes. Por lo que seguir por
la misma vena de andamios
se acertadamente autos, autos carpeta, seguir adelante y calentar. Hay una página, una página que
utiliza Entity Framework. Y entonces éste
lo llamaremos edit. Mi justificación para usar
estos nombres de página. Por qué dije ediciones en lugar de actualizar o dije índice
en lugar de lista. Notarás que
en la página de índice, esos son los nombres de las páginas. Se espera
ver que dicho,
sin embargo, si esos no
son los nombres de página que quieres, siempre
puedes cambiarlos. Entonces si quisiera que esto dijera actualización en lugar de editar,
entonces eso estará bien. Voy a llamarlo actualizaciones. Fui a cambiar esta plantilla de Create para editar así obtenemos ese formulario de edición y
verás la diferencia entre las plantillas de crear y editar. La clase modal sigue siendo coche, contexto de
datos significa el mismo anuncio. Entonces obtenemos nuestras dos quintas partes. Por lo que obtenemos actualizaciones, CSEA, esmalte, y el archivo de modelo detrás de él, nieve, esto es actualización. Pero si vuelvo
a la página de índice, el código que se
generó está
buscando la página
ASP va a querer ver
es editar y no actualizar. Así que está bien, bien. Simplemente puedo hacerlo nulo Cada
mirada adelante para actualizar la página. También puedo cambiar
el texto si quiero, porque esto es
sólo una etiqueta de anclaje. ¿ Qué se necesita que
quiera que se muestre? Puedo decir que quiero
mostrar actualización, pero la dejaré en editar
porque la actualización no es tan
amigable con el usuario o los usuarios
realmente no se relacionan con la
actualización de palabras como lo iban a editar. Lo que usted presenta a los
usuarios. Siempre importante. Pero puedes tener un poco
de libertad con tus nombres de tono. Pero eso es todo lo que quería demostrar por no ediciones de Nimitz, poner nombrarlo, actualizar. Quieres tener cuidado si
vas en contra de la norma, entonces tienes que
cumplir cada vez más para facilitar tu
implementación. No obstante, de lo contrario, si
vas con las normas, tu necesidad de personalización
se reduce en gran medida. Volvamos
a nuestro archivo de código para la actualización del archivo CSS HTML. Entonces es más o menos lo
mismo uno donde inyectar también el contexto de la
base de datos, tenemos el mismo tipo
de propiedad de banda, propiedad que
vimos en el Create. Entonces vamos a
tener el primero. Vamos a tener campos
para el auto en el foro. Necesitábamos estar
atentos a los cambios a los valores de la propiedad para que podamos
procesarlos en post. Aviso, sin embargo,
que están en GitHub tiene mucha más acción pasando, entonces nos habremos
acostumbrado,
y vamos a caminar a través de
lo que está pasando aquí. Uno, notarías
que esto es asíncrono, por lo que lo hicieron acrecentar esta vez, y tiene un
parámetro para int id Ahora nota que este int tiene
un signo de interrogación al lado de él. Por lo que anteriormente
habría mencionado ins
neoliberales versus int. Entonces int significa
que no es opcional, tiene
que ser al menos 0. No obstante, hay
momentos en que es posible que
necesite un valor nulo en la variable que se
supone que es un int. En esta situación,
básicamente están diciendo que alguien puede intentar navegar por la
página de actualización sin proporcionar un ID. Muy bien, entonces eso significa
que cuando llegue aquí, ese valor de ID sería nulo. Lo primero que
hace es comprobar si el valor id es nulo, luego volver no encontrado porque no
puedo encontrar nada. No significa nada. Y si
me estás diciendo que quieres editar un registro sin nada como su ID. Y ya
pasamos por hold que ID es ese identificador único
en la base de datos? Es una clave primaria. Eso es lo que es el ID. Si me dices que
quieres editar un ícono de registro, acude a la idea del
registro que te voy a decir si no es teléfono y no lo encuentro bien. Así que cada vez que obtenemos esas
404 páginas en cualquier sitio web, básicamente lo que esto
es todo lo que están haciendo, están regresando, no telefoneados. Muy bien. Si no se proporciona ninguna identificación, entonces no puedo encontrar nada. Eso es más o menos lo que
estamos viendo al usuario. No obstante, si va más allá de esto, entonces podemos suponer que
el ID tiene un valor. Por lo que tratamos de encontrar ese
valor en la base de datos. Esto es básicamente decir, ir al contexto, ir al establo del auto. Así que ve a luego disculparse, ve al establo del auto y consígueme el primer
registro o por defecto donde el ID coincide con el valor
que está entrando. Esto es lo que
llamamos expresión lambda. Muy bien, así que pongas demasiado. M podría haber sido cualquier Tolkien, esta podría haber sido la
palabra registro igual w, q igual W2 palabra cachorro. M no lo es, no es nada
manifiestamente especial. No obstante, m
seguido de esta flecha, que solo voy a
llamar la flecha Lambda, convierte en una expresión lambda, lo que significa que
básicamente estás definiendo función como capacidades dentro
de uno declaración. Muy bien, Así que esa es
una expresión lambda. Entonces podría haber usado un elixir degenerado m, eso está bien. Pero podría haber usado
cualquier letra, cualquier palabra, cualquier Tolkien y
dicho flecha Tolkien. Entonces el Tolkien
básicamente representa cada registro en la base de datos. Entonces en lugar de que yo
tener que usar como un for-loop, porque ya establecimos
no autos es como una lista de tarjetas o la lista de
registros en la base de datos. Ya miramos cómo
tendríamos que usar for-loops o para
cada bucles para
pasar por lo menos para conseguir todos los registros en lugar de
decir que me traigan los autos. Y luego para cada tarjeta
que está en la base de datos, si el ID coincide, básicamente esto está haciendo toda
esa lógica que acabo de describir para nosotros. Entonces el Tolkien aquí representa cualquier registro en la base de datos. Obtenemos las propiedades
para que pueda decir m dot m dot nombre, m dot año. Entonces, si necesitaba
buscar algo, podría usar esta expresión
lambda para buscar por nombre por oído. En este caso, estamos
buscando por ID. El ID que mucho es el
valor que se está pasando a través del
intento de navegación del usuario a esta página. Puedo ver si el auto es
no porque tal vez
pasaron en ID TIN y
no hay auto con una identificación diez, eso significa que nada habría
sido volado a la base de datos. Entonces estamos diciendo que si
no se encontró nada, entonces devolvemos la página. Hay formas en que
puedas refactorizar esto, pero puedo explicar por qué
fue escrito así y por qué probablemente
querría refactoriarlo ganado. Fue escrito así porque una base de datos llamada es cara. Me gusta pensar en ellos
como algo caro. Lo haces cuando sea
necesario en absoluto. Quiero simplemente hacerlo
fuera de la pero sólo porque más o menos lo que están diciendo es que si no
se proporcionó nada, no espere. Llamó a una base de datos, verifica si se
proporcionó
algo y si no, entonces mátalo ahí mismo. La persona está perdiendo tiempo y recursos.
Mátalo ahí mismo. No desperdicies la llamada de base de datos. Después de que hacemos la llamada de la base de datos, todavía queríamos saber ¿se
llamaba ese respecto? Si no se encuentra, entonces regresamos no encontrado 404. De lo contrario devolvemos
el pH con los datos cargados online con un crear donde el
Create solo tenía el vacío o simplemente la
instanciación del auto. Entonces no había nada en la
tarjeta, esto estaba vacío. Por eso obtenemos
la forma vacía. Porque el
nombre del punto del coche estaría vacío. Coche dot año estaría vacío. Depende de nosotros llenarlo
y se llenaría e ingresaría en la
base de datos por correo. No obstante, en las
actualizaciones estaban tratando llenar esto con datos
antes de volver a la pizza, recuerda dije que
quieres poner todo dentro de las propiedades antes de
enviarlo al real apareció
antes de disputar a los usuarios. Así que al igual que con el
índice, estamos en conseguir. Seguimos adelante y corrimos la consulta. Entonces recuerda que
esto se estaba utilizando, esto se está utilizando en la propia
página, modelo dot cars. A diferencia del índice
donde no estamos, lo siento, igual que con el índice
donde llenamos las tarjetas con datos antes de volver página. Tenemos que hacer eso
para la actualización. Por lo que necesitamos encontrar el registro
y luego devolver la página. Y luego
enlazaría
automáticamente los valores existentes
provenientes de la herramienta de base de datos, los campos de entrada en
el formulario generado, que son capaces de
mirar en unos segundos. Entonces es por eso que realmente
fue escrito así. Si no hay identificación proporcionada, no desperdicies la base de datos,
llame, muerte de ejecución. De lo contrario, intenta encontrarlo. Y si no
lo encuentras, mata la ejecución, lo contrario, sigue adelante
y muestra la página. No, esto podría refactorizarse
para tener una declaración if porque estas dos
declaraciones if mientras están comprobando dos escenarios
diferentes, realmente
están haciendo lo mismo. Si queríamos una respuesta
diferente a cualquiera de ellas y tenemos dos
líneas de código para cambiar. El factor preguntándose
podría ser que, vale, arriesgamos la llamada a la base de datos. Lo intentamos para encontrar
el auto sin importar, no
obtenemos el valor. Muy bien, entonces sólo podría
decir si el auto es nulo, porque al final del día, si se pasa
nulo teoría sólo va a ver si el ID es
equivalente a nulo, lo que nunca sucedería. Entonces auto sería nulo, volvemos no encontrado. O si ese valor es 0 o
algún ID que no existe, Kyra todavía va a ser
nulo, devolver, no telefoneado. Ya ves, solo
te estoy mostrando que el código generado, pero no tengas miedo de
explorarlo y modificarlo, como puedes pensar que podría
ser más eficiente. Pero les estoy dando los dos
escenarios y explicando por qué se
estableció
un escenario de esa manera. ¿ Y cuáles son los
pros y los contras de ella? Ahora que tenemos una idea de lo que está haciendo
el inicio y
no voy a modificar esto. Lo dejaré tal y como está. No, podemos ver lo que tiene la página
HTML para mostrarnos. Entonces la página HTML va a parecer bastante
idéntica o crear. En este punto, No, estás
viendo bien hay dos los dos mismos foros literalmente
ahí para verle formas. La diferencia aquí sería
esa forma degenerada aquí. Dice auto de actualización y fui
a cambiar esto para editar auto. Saca cualquier cosa
que no necesite. El botón por defecto se
guarda en forma decretada. Se dijo crear. Muy bien, y luego
podemos una vez más solo tomar btn block y
ponerlo por aquí. Además, si no quisiéramos la
clase para ella llamada MD4, podríamos cumplir con eso llamado
MD, sea lo que sea. Solo te estoy mostrando
que los dos formularios son generalmente idénticos entre un formulario de creación y una actualización
en la mayoría de las aplicaciones web, generalmente
son idénticas. En este punto, podrías tomar
otra decisión de diseño. Podrías hacer una página
que diga tal vez upsert, actualizar e inserciones que apoyen mental emerjan hacia la
actualización e inserción. Y lo llaman absurdo. Este absurdo Pij sería más
o menos en el, ETC. ¿ Recibí una identificación en
Get ¿Me dieron una identificación? Si me dieron una identificación, traté de encontrar el auto y luego
volver a pitch. De lo contrario, solo cargue
la página vacía. De esa manera, si se
presentan datos aparecerán. Si los datos no se
presentan en la orilla hacia arriba. Y entonces podría hacer otra declaración
if aquí para ver si el ID está presente en shore un valor en el botón o mostrar el otro botón llamado
éste es un botón de actualización. Yo querría que
fuera btn-primaria, me gustaría que fuera T
sea btn peligro. Entonces es naranja.
Solo te estoy mostrando, solo, solo estoy explicando diferentes consideraciones de diseño. Todo el mundo tiene
diferentes contextos. Y así podría hacer algo
que tú estás viendo, ya sea que no sea
necesario hacerlo de esa manera. O podrías hacer algo
con un colega o un amigo tuyo y
ves que no necesitas
hacerlo de esa manera. Pero los contextos siempre deben ser el factor determinante para sus decisiones a la hora de
desarrollar una aplicación. Continuemos. No voy
a hacer esas cosas absurdas, solo te
voy a dar una idea. Pero el punto es que las
formas son casi idénticas. aplicarían las mismas reglas de validación. El buck a listar está ahí, tenemos el botón,
tenemos nuestros campos de entrada. Sólo voy a
reorganizar este. Por lo que se parece al Create en términos
del orden de los campos. Pero hay una cosa que
quería señalar y que es esta entrada para lo
oculto sí cambió esto
a todos en el último. Por lo oculto. Si vuelves a nuestro Create, no
hay oculto. Para una identificación. Este campo oculto es
absolutamente importante. Uno, es un oculto porque nuestros usuarios realmente no necesitan
conocer nuestras
claves primarias. Piénsalo. En Amazon, es posible que vea
nuestro número de producto, pero ese número rara vez es nunca. La llave paria María. Es posible que veas un número ISBN
para un libro o algo así. Ya sabes, un número de identificación
para nuestros alumnos. Pero esa rara vez es
la clave parietal. La clave primaria es
interna al sistema. No obstante, es absolutamente
necesario para el transporte por carretera. Qué pasa, porque
si no tenemos que esa clave primaria sea
cargada en este formulario, entonces siempre va a suponer que
se trata de un nuevo récord. Muy bien, así
que tenemos que por eso creo no lo tiene porque
siempre es siempre es un nuevo récord. No hay identificación cuando estás
creando algo. No obstante, cuando estás editando o actualizando todo lo que pasamos por
los ungulados, es
obvio que el
ID es muy importante. Y tenemos que recordar
el DNI a través del formulario. Para que cuando esta persona
somete la fórmula, pegamos la cabeza de nuevo al on post, ¿ves mucho más
repentinamente a bordo? Sí, hemos validado. Ya pasamos por
cómo
se ve la validación , eso está bien. Pero entonces aquí donde
decimos contextos dot
coche adjunto y cambia de
estado a modificado. Lo que realmente está pasando aquí
es que estamos viendo base de datos. Por favor empiece a llevar por carretera
este auto objeto. Por lo que habríamos conseguido aquí el disco
original del coche. Si el nombre era un
calabacín al deporte. Eso es lo que tenemos aquí. El año fue 2013,
Eso es lo que conseguimos. El DNI fue de tres. No, no escuches después de
que se haya editado, la idea nunca debe ser editada porque diferente IID significa que es un disco diferente. Entonces por eso está oculto
y no permitimos el usuario lo vea o
interrumpa con él, pero está siendo transportado por camión
en segundo plano. Ahora si lo cambié de Suzuki. En los deportes y en como, oh, no era un deporte. Déjame quitarme el deporte. Entonces lo que estamos
viendo es base de datos. Por favor empiece a
ver este registro y sepa que está modificado. En la base de datos sabrá
que está modificada o Entity Framework
sabrá que está modificada u otra
por el ID. Entonces va a suponer que
algo en él cambia. Lo único que no
debe cambiar es el ID porque ID está
presente, lo sabrá. Ok. Tengo constancia con
esa identificación, ¿verdad? No. Entonces lo que haré es guardar los cambios que se han hecho a ese registro con ese ID. En esencia, va a
terminar con dos versiones. Va a tener
el registro original que acabamos de recuperar. Y entonces va a
tener este nuevo disco o esta nueva versión
del disco COVID, pero propiedades potencialmente
diferentes. Y luego Guardar Cambios,
diremos, está bien, voy a guardar los nuevos datos
en la tabla en consecuencia. Esto, en éste, verás que tenemos
un try-catch porque esto es situación más
delicada. Es decir, ¿y si dos personas trataran de actualizar el auto? Hice clic en editar este auto. Segundos antes de
hacer clic editar este auto, ambos
tenemos este registro de
acero o
al menos quién ambos de la corriente requerida entonces hago un cambio. Lo cambié
del año 2013 a 2015 y
luego haré clic en Guardar. Pasarás bajo
el más largo bajo registro y todo tu
registro es de acero porque tenías la versión
del registro antes de
que yo lo actualizara. Al hacer clic en Actualizar, vas a intentar
guardar los cambios. Gané algo
que ya estaba actualizado desde que lo hizo clic. Eso llevaría a este tipo de error o no
sabía sobre intentar y atrapar o
manejar excepciones, explotar C-sharp, lo que estamos haciendo es
tratar de guardar los cambios, pero entonces es sólo
esbozar explícitamente esta excepción de
concurrencia de actualización de DB, que es ese mismo escenario
que acabo de mencionar. Necesitan ver eso, bueno, si el auto no existe, entonces devolver no teléfono
porque tal vez fue borrado para cuando
estoy tratando de actualizarlo. Si no piensa desde entonces,
devolver no teléfono, de lo contrario, solo lanza una excepción y error más Griswold
formas de manejar esto, pero eso es lo que dice el código que
se generó nosotros. Entonces eso no es problema. No obstante, si el juicio
fue exitoso, no
hubo nada atrapado, entonces devolvemos el discurso índice. No, esto es solo un auto método existe que básicamente simplemente
devuelve verdadero o falso. Base de datos comprobar el auto estable
si hay algún registro. Y aquí hay otra expresión
lambda. Y sólo para mostrarte que
los tolkien realmente no
importa arriba arriba es la
misma expresión lambda, pero usamos m aquí abajo. Es la misma
expresión lambda que solo usa E. Si querías volver a
compararlos, solo copia esto y
ponerlo cerca de eso. Miré el hecho de que
son el mismo código, sólo dos diferentes
lambda Tolkien. Básicamente es sólo decir: ¿Hay algún auto en la
base de datos que tenga ese DNI? En caso afirmativo, entonces bien. Si no, entonces regresa. No llamó por teléfono. Entonces si existe, eso significa que los datos siguen siendo
que estoy tratando de cambiar. Entonces arroja una excepción, o podríamos simplemente
enviar error de botón diciendo Hey, algo
salió mal. Probablemente quieras volver a intentar
esa operación. Muy bien, veamos cómo funciona esta operación de
actualización. Así que sólo voy a seguir
adelante y saltar adentro. Muy bien, así que no, veamos cómo funciona esta funcionalidad de
actualización. Cuando hago clic en Editar. Observe que va
a traer los datos. Eso no debió haber
sido un botón rojo, eso debió haber
sido btn advertencia, no ser diez Dash peligro. Permítanme solo hacer ese cambio. No hay advertencia para un botón naranja. Después de hacer ese cambio, sólo
puedo refrescar. Y ahí vamos. No, es un botón naranja. Entonces veamos cómo se ve esta operación de
edición. Aviso en la URL que
ves autos slash update, luego las cadenas de consulta. Así que recuerda cuando
hablamos de cadena de consulta llamada datos
se transmite a través de formularios. Entonces cuando usamos un GET, entonces estamos no especificamos que realmente
va a poner todos los datos y cadenas de consulta
que puedan ser peligrosas. Y mientras estamos trabajando
en un sitio web estático sin nada
particularmente peligroso que se transmita desde nuestro
formulario a cualquier lugar, estuvo bien. obstante, no
notarías que generan explícitamente formularios
con método es igual a post, porque cuando publicas los datos o cuando
envías el formulario, no quieres estar enviando datos a través de la cadena de consulta. Especialmente como
cuando se trata de tarjeta de crédito
o información personal de los usuarios. Sigue volando ese
nombre de usuario y contraseña. No quieres eso en
la cadena de consulta que hablo. Si bien es inofensivo usar
la cadena de consulta para el ID, puede
que no sea inofensivo cuando estés enviando desde el formulario. Entonces es por eso que
siempre queremos asegurarnos de que nuestras formas, nuestro método igual a publicar. No obstante, hagamos un poco de
experimentación aquí. Así que estamos hablando de ambos
el agujero se pone bien. Entonces cuando navegemos
para indexar con el ID, solo
voy a volver a poner aquí un
punto de interrupción. Sólo voy a
refrescarlo cuando llegue al punto de ruptura. Y pasamos el puntero sobre
la propiedad ID, se ve que se pasa esa identificación. Entonces eso es lo que abrió. Obtenemos ese ID que viene a través
de la cadena de consulta. Y entonces somos
capaces de determinar, está bien, Esos autos de punto
existen en nuestro sistema. Ahora mira lo que pasa cuando cambio este ID a uno
que no existe. Sólo tengo un auto
en mi identificación del sistema. No hay auto con el ID TIN. Si traté de bros
ahí, me dan diez. Muy bien. Y entonces si acabo de
hacer F5 y continuar, entonces verías
que solo está diciendo que no
se puede llamar HTTP o fluoróforo. Entonces esto es lo que
obtenemos en virtud de llamamos retorno, no telefoneado. Muy bien, por lo que eso es
básicamente sostén, eso funciona. Ahora nota una vez más que se
trata de un método on post. El método on post
es lo que va a funcionar con el formulario que está enviando
con el método es igual a post. Muy bien, así que déjame
volver a lo grabado
que tenemos Hagamos logrado. Por lo que el año fue 2215, no 2013. Eso está bien. Fui a salvar y
luego mirar eso. 2015. Recuerda que esto se está cargando desde la base de datos
cada vez que golpeas el índice, está consultando la base de datos. Lo que veas aquí
es el estado actual
del registro que
está en pocas palabras. Obra de actualización completa. No importa cuán complicado pueda verse
un sistema, cuán sofisticados sean los botones y
animaciones y así sucesivamente. Lo que estamos haciendo aquí está en la raíz de cada sistema, el sitio web con el que
interactúas, todo lo que están haciendo
es permitirte
poner datos en la base de datos a través de la reforma, modificado a través de un formulario. Míralo a través de una
página de índice o una página de detalles que vamos a mirar
en unos pocos o eliminada. Eventualmente. Eso es todo lo
que realmente está sucediendo, sin importar el sistema
que esté mirando. Cuando volvamos, veremos implementación o
eliminación de funcionalidad.
12. Añadir detalles Página de maquinilla: Muy bien, así que estamos de vuelta. Y sé que en la lección
anterior dije que trabajaríamos
en el Delete, pero tengo una sorpresa
para el Delete, vamos a hacer las cosas un poco diferente para el Eliminar. En cambio, trabajemos en
nuestro discurso de detalles. Muy bien, vamos a
saltar a nuestro código. Y creo que a estas alturas
conocemos al Drew. Vamos a pelear
o velocidad de detalle. Así que haz clic con el botón derecho en la carpeta de autos, agrega página Razor usando
Entity Framework, estamos llamando a este detalles Y la plantilla sería
la plantilla para detalles. Entonces nuestro modelo es auto y
todo lo demás queda. Y obtenemos nuestra página
para los detalles con su archivo de código correspondiente. Conocer la
página de detalles es más
o menos sólo otra página que nos ayuda a conducir a la r
de corroer que se lee. En este punto,
podría ser algo difícil ver la relevancia
de la página de detalles. Porque lo que realmente te
muestra la página de
detalles son los
detalles de algo, mientras que el índice realmente
muestra la falta de una vista previa. Entonces si tal vez nuestra mesa tuviera
20 o 50 campos diferentes, tal vez incluso diez campos, no
querrías todos los
de la lista. Pensable como un costo, una lista de clientes,
o incluso en Amazon. Cuando estás mirando
los productos en Amazon, no te
están mostrando
cada cosa sobre la proteína. Te están mostrando
el nombre, su precio, tal vez cuánto
tardaría en enviar. Pero entonces en el momento en que haces
clic en ese producto, entonces ves todo lo que
construyo un prototipo, ves todos los
tamaños y colores potenciales y de dónde es y qué
material lo hace, etcétera Así que eso es realmente para qué está diseñada la página de
detalles. En este caso, es discutible que es opcional porque auto realmente cuando tiene
dos detalles para mostrar en cualquier punto cuáles
son el oído y el nombre. Bueno, una vez más,
si fuera una mesa más grande con más detalles para mostrar, entonces no
querrías
enumerarlos todos en el
índice en ese momento. Probablemente no
querrías mostrarme ser el año del auto o
el nombre del auto. Entonces digamos que no
queríamos mostrar el año. Sólo voy a
comentar esto. Entonces cuando
miras la página de índice, solo
estás viendo
el nombre del auto. No obstante, se quiere ver el resto de los
detalles sobre el auto. Haz click en la
página de detalles donde tienen el enlace aquí y luego sabes que hemos creado la página, la tenemos cableada. Por lo que va a ir a esta página de
detalles detalles que CSS HTML. Simplemente modificaré esto
para decir detalles del auto. Deshazte de que cada Doug, hay una forma antigua
porque una vez más, solo
es leer datos, datos como un
enlace generado automáticamente para ir a Editar. Entonces aquí hay otra cosa. Está buscando,
editar fuera de la caja. Utilizamos la actualización del nombre de página. Entonces tengo que
asegurarme de cambiar eso. Entonces podemos volver a
la lista si así lo deseamos. De acuerdo, entonces, ¿qué
está haciendo realmente la página de detalles o el archivo de código? Cuenta con auto predial, no
tiene cláusula de
propiedad de Bend. No hay presente extranjero, pero sí tiene la propiedad. Y luego hace
lo mismo donde dice
Consígueme el registro con el yodo
está buscando esa identificación. Si es nulo, volver no telefoneado. No es nulo, entonces
trata de encontrar el registro. Si puedes encontrar el registro, No es teléfono, devuelve la página. Entonces esta es una especie del mismo código que vimos generado para la, para la página de edición. Muy bien, no voy a
hacer las modificaciones aquí. Estos tienen tanto a comparación del regular fuera de la caja anotado frente a nuestra pequeña modificación donde
acabamos de hacer una llamada a base de datos y
determinar si no se encuentra. Para que puedas compararlos, pero sigamos adelante y corremos. Así que sólo voy a Control F5 que
podamos ver lo nos trae
el pH de los detalles de nuestra página de índice. Si pego detalles, entonces voy a ver los detalles de la
tarjeta y me
va a dar
todos los detalles. Por lo que una vez más,
esto se genera. Puedes modificar el aspecto y la
sensación de la misma como necesites. Desde aquí puedo hacer clic en él. Y debido a que
modificé el enlace, no estoy teniendo problema
saltando a la página de edición. Puedo volver a la lista. Una vez más, toda
la navegación está estrechamente acoplada aquí porque cada enlace sabe dónde encontrar. Eso es muy, muy
importante desde cualquier pH, deberías poder
navegar a otra página. O el pH nulo debe ser de
más de dos o tres clics en
función del tamaño de un sitio web. Pero generalmente hay
una
política de gira de tres clics a la hora de
navegar entre páginas. Eso es realmente todo por los
detalles, Niza y sencillo, comparado con todo
lo que hemos
pasado con el crear y editar para ver que los
detalles son realmente sólo cargar en el
registro y mostrarnos. Se puede modificar lo que se
muestra en el índice. Una vez más, si no quieres que todos los datos en la página de índice, por
eso tenemos
la página de detalles para mostrar lo que no se
mostraba en la lista. Cuando volvamos,
vamos a mirar usando algún jQuery
con nuestro delete. Porque con nuestro delete, no
voy a crear
toda la página para el delete. Tienes dos formas de
mirarlo y
exploraremos las opciones
cuando volvamos.
13. Añade la página de eliminación de Razor: Chicos, bienvenidos de vuelta. Vamos a estar
mirando trabajar con nuestra eliminación operativa. Empecé a mencionar
que generalmente hay dos modelos que gobiernan
mantener la eliminación ocurre. Uno, se puede establecer el pitch
he hold lead, que en realidad es
igual a un discurso detallado, pero también se dobla como página de
confirmación porque
quieres permitir que el usuario vea el registro que son
capaces de eliminar y luego pregúntelos, ¿
Estás seguro que quieres eliminar? Echemos un vistazo a ese 1 primero. Eso sigue el mismo patrón
que hemos estado siguiendo. Adelante y agrega una nueva
página Razor usando Entity Framework. Llamaré a este eliminar. De la plantilla. Yo sólo elijo las
necesidades o el mismo modelo. Entonces obtenemos nuestra página generada para eliminar con su archivo de código. Por lo que una vez más, inyectando
el contexto DB, también
tenemos un botón
apropiadamente para el auto. Por lo que aquí va a ocurrir alguna
forma de forma o recolección
de datos. En Git, tenemos el mismo tipo de lógica que acabamos de
ver con la edición. En la página de detalles
donde obtenemos el ID, asegúrate de que no sea nulo, obtienes el registro y devuelvo
a pH si grabo fue encontrado. Pero luego en el post, también
va a verificar
que el ID no esté vacío. Por lo que ten en cuenta que está
buscando sólo el ID en Post. Es muy posible simplemente tomar un parámetro que corresponda con los datos que
se encuentran en la página. Así que permítanme simplemente correr
el paralelo aquí. Con nuestra operación de actualización. Dijimos comprando propiedad
en todo el auto. Aviso que no hay
parámetros en el OnPause. Eso se debe a que
todo el objeto automovilístico tenía campos presentes en el formulario. Entonces teníamos una identificación, teníamos
el nombre, teníamos el año. Entonces cuando hacemos clic en Guardar, realidad serializaría todos esos
puntos de datos que se
ingresaron y
los colocaría dentro de los autos. Entonces es por eso que enlazo propiedades, básicamente
cargando qué datos entraron al objeto, entonces podemos operar en él. Conociendo el caso de un delete, realmente no necesito saber
el nombre y el año. Realmente solo necesito
saber cuál es el ID del registro que
hay que eliminar. Entonces puedo especificar en el onPause que
solo estoy buscando el ID. Una vez más, puedo
hacer todos los cheques. Comprueba si es nulo. Quiero decir, si estoy tratando de
eliminar nada, entonces devolver no carpeta, pero de lo contrario intente encontrar el registro del auto que
necesita ser eliminado. Entonces esta vez solo vamos
a usar este hallazgo asíncrono. Entonces es algo diferente de los valores predeterminados de primer orden porque la multa estos Sing utiliza
los valores clave para que pueda
dispersarme en Id a diferencia los primeros o predeterminados que requieren una condición o
esta expresión lambda, donde esto es cierto, entonces conseguimos un auto,
mientras que el hallazgo, va a ver
ir a la mesa y encontrar un registro con ese
ID para la clave primaria, que por supuesto todavía
se encuentra con el riesgo de que sea no. Entonces tratamos de encontrar el auto. Sería ese ID si el
auto no es igual a no, entonces procedemos a
retirar la base de datos del automóvil, conseguir la mesa de autos, y quitamos este registro. Por lo que tenemos que encontrar el registro. Después quitamos el registro. Una vez más, estamos incrementando
datos por lo que guardamos los cambios. Después de todo eso, volvemos al índice. Por lo que aunque Kiara estuviera
modo en este caso, no
vamos a
devolver ninguna no telefonada. Sólo vamos a
redirigir a índice va. A lo mejor estás
tratando de eliminar algo que importaba el tiempo que
haces clic en el plomo, alguien más, lo
necesitaban, sin daño, sin falta, solo regresas
al índice. Una vez más, esto se
acaba de generar código. Si quieres hacer algo
diferente en tus escenarios, siéntete libre de
modificarlo como necesites. Este escenario funciona bien porque cuando pasamos al
Delete, vemos uno. Se ve igual a los detalles. Este es el mismo código que
estaba en la página de detalles. No obstante, tenemos un mensaje. ¿ Estás seguro de
que quieres eliminar esto? Simplemente voy a hacer lo que
siempre hacemos aquí donde
veo los mejores cambios están
golpeando borrar auto. ¿ Estás seguro de
que quieres eliminar esto? Mostramos los
detalles del auto, pero mira el formulario. Esta vez tenemos una forma de
todo lo que está en esta forma. Bueno, sí, es post método, pero todo lo que tiene es el
oculto para la identificación del coche. Eso es análisis básico P4. El Yo Am Voy a
atarme a esa propiedad. Por lo que habría visto
este formulario ESP, el Crear, ver cualquier cosa las actualizaciones, vinculante a esta
propiedad coche dot ID. Pero entonces el nombre del
inmueble será ID. Y luego en el Delete, eso realmente solo
lo vinculará al ID del parámetro. Entonces así es como
sé que solo estoy obteniendo el DNI de
este envío de formulario. Así que aquí estamos viendo es
un botón de enviar con el delete válido y es un peligro de guión BTN,
lo cual tiene sentido. Si cambias de opinión, siempre
puedes volver a la lista. Muy bien, echemos un
vistazo a lo que obtenemos con el delete. De la lista voy a
hacer click para eliminar. Se va a cargar mi registro, eliminar autos, por lo que
quieres eliminar esto. Y así en los detalles
del registro, podemos optar por eliminar o podemos optar por
volver a la lista. Entonces si hago clic en Eliminar, entonces vuelve a la
lista y ya no hay un coche en mi base de datos o
al menos las leyes de base de datos. Una carta menos y tenía
antes de hacer esa operación. Sólo voy a
crear recrear el auto rápidamente. Suzuki Swift sport. Y fue un 2013
haría y crear. Muy bien, entonces tenemos
nuestro registro de nuevo y puedes hacer esto por
tantos registros como necesites. Entonces esa es la opción uno. Te gustaría permitir que el usuario revise el
registro y pregunte, ¿
Estás seguro de que no pudieron
eliminar y confirmas? Sepa qué pasa si no
quisiera introducir otra página completa solo
para la operación de eliminación. ¿ Y si quisiera
eso aquí mismo? Cuando la persona hace clic en eliminar, les
pedí pop up tal vez. ¿ Estás seguro de que quieres eliminar? Haga clic en sí, y luego ocurre
la eliminación. Probemos algo que nadie método
de implementación de esto sería envolver cada enlace de eliminación en
un formulario y convertirlo
en un botón de envío en lugar de
solo una URL a la Delete. Sí, tenemos la página, pero volvamos
a nuestro índice y tipo de modificación o lo que
está pasando aquí. Podría decir forma aquí mismo. Déjame hacer bien mi ortografía. En esta forma,
vamos a tener botón. Este botón básicamente
va a ver lo
mismo que ve el
botón actual no comía. No quiero que necesariamente se
vea como un botón. Quiero decir, supongo que en
este momento
probablemente podamos empezar a ser
creativos con nuestros enlaces también. Entonces no hay problema. Sólo diré que la clase
es igual a vt n dash. Eso es editar. Por lo que probablemente querré que sea como una advertencia. Eso es todo. Es botón. Por supuesto cualquier botón
necesita ser T y luego btn dash el
tipo de botón. Este es un detalle, por lo que esta sería
b2 info de la industria, solo para mostrar la info. Y entonces este botón va a ser costo igual a b2 y peligroso, No, yo usuario no podría
decir cuál es un botón,
cuál es un enlace. Todos ellos se verán iguales. Tenemos este botón Eliminar. Lo que podemos hacer es decir onclick. Ya
miramos esas cosas de eventos cuando hablamos de
JavaScript antes, puedo ver, ¿Estás seguro de que
quieres eliminar este registro? Entonces onclick, voy
a devolver un confirmar. Entonces ese es un método incorporado. ¿ Y cuándo miraremos el método de alerta en JavaScript? Al hacer clic, confirmado es solo
otro métodos JavaScripts que estoy viendo desclicar
volver, confirmar. ¿ Estás seguro de que
quieres eliminar este registro? Yo soy que básicamente sólo
da un sí, no caja. Eso es realmente todo lo
que necesito para el botón. Pero luego volvemos a la forma uno. Queremos asegurarnos de que
sea el método post. Ahora voy a explicar
por qué queríamos
ser explícitos sobre que fuera post. Hay una serie de cosas
sucediendo con los postes. Por lo que los beneficios implícitos de usar los posts que
ya exploramos, donde hemos hablado
sobre el hecho de que los datos no se están
enviando a través de la URL. Se está ocultando
en el fondo. Entonces eso es bueno. Soy protección inherente a los datos
sensibles como nombre de usuario, contraseña,
información de tarjeta de crédito, etcétera. No, probablemente te
estés preguntando, vale, entonces qué desde entregable,
tal vez la identificación. Bueno, ya vimos que en
el Foro Delete incluso entonces, intentaron usar el post aquí porque este mismo concepto, golpearon el ID y luego
tuvimos el botón eliminar. Es lo mismo que estamos haciendo excepto que lo
estamos haciendo dentro de la lista en el índice. Pero entonces otros beneficios
de la publicación serían incorporados en ASP.Net Core, nuestras características de seguridad contra
XSS y el CRS si los ataques. Esencialmente
sin entrar en los detalles de lo que estos
dos significan y así sucesivamente. La forma en que funcionan sería
que las personas puedan usar JavaScript y secuestrar maliciosamente los datos
que se envían a través del cable. Lo que ASP.Net tiene incorporado
o ASP.Net Core. Cada vez que tengas un formulario y lo
conviertes en un post método, y luego lo tienes
en post
esperando ese tipo de envío a través de
esa publicación. Cuentan con el validar de
Tolkien antiextranjero que cualquier solicitud que
llegue a un puesto es válida desde el sistema y no secuestrada
por una entidad externa. De acuerdo, así que eso es como una característica de seguridad
que está incorporada. Doy no mencioné que no
te darías cuenta de que todo eso realmente está
sucediendo en segundo plano. Entonces por eso es
importante que a
pesar de que no estamos
generando ni formamos aquí, siempre
quieras
asegurarte de que lo tengas como post
método y esas características de
seguridad casi
estarían implícitas. Otras cosas que queremos hacer ahora que tenemos el formulario, tenemos el botón, tenemos que decirle
a dónde ir. Ahora cuando digo raro al gol, me refiero a que las otras páginas que tenían foros como vamos a ver, el Create crearon el
formulario que había dicho post método. No tenía nada explícito que decir a
dónde debía ir. Eso se debe a que supondrá que una vez que se presente el formulario, se trata de una solicitud de post. Por lo que automáticamente
irá al on post. De lo contrario va a conseguir lo
mismo con las actualizaciones, lo
mismo con
el índice de eliminación, sin embargo, solo tiene uno en Get. No tiene posts. Y sabremos que estamos
poniendo en una forma que va a
estar tratando de llamar a un método post en la
página de índice que no existe. Lo que podemos hacer ahora es
crear Handlers personalizados. Así que sólo buck trucking, sólo para que entendemos
en llegar a la publicación. Y el que
somos capaces de crear, a esos se les llama manejadores. Estos métodos conseguir, publicar, hacer lo que sea en
segundo plano, son manejadores. Por eso los llamamos. Tenemos que decirle al formulario
que debe ir a su ISP, P dash page dash handler. Voy a ver DDGT. Ese es el nombre del
manejador al que debe ir. El método es post. No. Además de eso, también
quería
obtener el valor id. Voy a ver es B
dash, escribió guión ID. Eso no soy yo diciendo que cuando estás enviando el formulario, quiero que pases por encima escribí valor o un
valor de cadena de consulta con ese nombre. Entonces si dijera auto ID
o si dijera pulpy, sea cual sea ese tipo
ahí después de que la palabra escribió, ese es el nombre de la
cadena de consulta que dice
el nombre del parámetro que mi
manejador estará buscando . Entonces lo voy a dejar
como yodo de coche en lugar de solo el DNI. Muy bien, entonces ahora se puede ver
explícitamente a lo que me refiero. Por lo que ASP ruta del dash,
identificación del coche debe tener el valor
de at sign item dot ID. Aviso cada vez que hacemos
clic en Editar o detalles, se
envía automáticamente a través del ID. Eso se debe a que desde
el bucle para-cada, cada elemento donde el enlace que
es p root dash ID aquí. Entonces eso ya está sucediendo. Lo vemos sucediendo
cuando haces clic en detalles. Se llama
página de detalles y está enviando sobre el valor id. Es por eso que en Get, está viendo identificación. Al igual que con detalles o
borrar más bien en Post, está buscando ID, y eso es porque el delete, déjame encontrarlo rápidamente
en el Delete, realidad
estamos sentados aquí. Sólo te estoy mostrando
diferentes sabores. Obtienes el código generado, pero es bueno entender cómo puedes hacer
lo mismo de múltiples maneras. Esto funciona el formulario y está enviando
el DNI esta semana. Esto también funcionará con menos líneas de código,
solo la forma. No obstante, diciendo ir a este manejador de
páginas y enviar un parámetro llamado Car
ID con el mismo valor de ID. Es un método postes. Estamos agregando esa
confirmación al botón. Y sólo voy a comentar
el enlace existente. Pero lo que vamos
a hacer ahora es crear ese manejador de eliminación
en el archivo de índice. En el código índice detrás. Puedo extender esto y puedo decir público y no
convertirlo en una tarea asíncrona. Digamos resultado de acción de tarea porque voy a querer que
devuelva un resultado real. Y voy a decir
en post, eliminar. Vamos a ver la
sintaxis en get on post. Y puedo decir post
asíncrono si quiero. Esa es una convención de nomenclatura
que reconocen. Eso es opcional. Pero mi punto es que uno sé es un método post
del foro, por lo que tengo que especificar en
post a llamo al delete. Dije que tu manejador es borra. Se
buscará automáticamente un manejador llamado delete que esté esperando
una respuesta post. Por lo que solo poner en
cartel en git
le dirá al manejador qué
tipo de solicitado debe estar buscando
del intento del Buró
en post delete. Lo que realmente voy a hacer
es solo reutilizar este código. Sólo voy a copiar eso
de la eliminación generada. Ciertas cosas no serán
adultas, pero eso está bien. Podemos rellenar los espacios en blanco, pero lo más importante
serían los parámetros. Así que voy a decir int signo de
interrogación identificación del coche. ¿ Por qué ID de coche? Porque en mi forma, el índice, sí
vi que tu raíz ASPE es identificación de auto para
todos los demás fue ID. ¿ Qué para este? Voy a decir identificación de auto. No lo estoy haciendo por
ninguna razón especial. Sólo te estoy mostrando. Lo que realmente hace la raíz ASP. Si cambio el ID, entonces mi manejador
necesita buscar ID. Si lo cambié a Puppy, necesita buscar cachorro. Sólo voy a
dejarlo como identificación de auto solo para que podamos ver
la diferencia. Entonces auto ID del formulario, va a llamar al pH 100 delete y es
un método post. Por lo que va a ir
por aquí y
buscar un manejador llamado
delete que está diseñado para en las respuestas post que está tomando el
parámetro llamado Car ID, entonces el código
tendrá que ser ajustado porque no hay identificación ya
no es identificación aquí, no
es identificación del coche, identificación del coche. Ahora había visto que no
hay auto seguro de un auto, eso está bien. Puedo ver fácilmente, dame una
variable local llamada auto, porque no necesito una propiedad de la clase como la última vez. Sólo necesito una
propiedad local llamada auto. Ve y encuentra el auto. ¿ Encontraste el auto? ¿Sí o no? En caso afirmativo, entonces retire auto. Muy bien, así que esta es
sólo mi variable local dentro de la eliminación. Entonces al hacer clic en Eliminar, tratamos de encontrar ID, señor. Tratamos de determinarlos. Id tiene un valor. De no llamarse por teléfono. Probablemente no
querrías no llamar aquí. Si estamos eliminando
directamente del índice, entonces eso está bien, eso está bien. Podemos dejarlo. Quiero
decir, una vez más, el contexto determinará cómo quiere utilizar una
experiencia para ser. Así que eso está bien. Lo dejamos,
lo dejamos como esta identificación del coche. Si hace clic en él, no telefoneado, intente encontrar el auto. Si el auto no es igual a nulo, entonces lo eliminamos y luego
recargamos la página de índice. Lee Erich a *****. Bueno, eso podría ser fácilmente redirigir a la página
sin nada en ella. Entonces literalmente solo diría, ¿en qué página estoy? Permítanme volver a cargar esa página. También podríamos decir tono de retorno. Por eso lo hice. En realidad resulta aquí. Entonces, a diferencia de éste, este no tenía un tipo de retorno. Por lo que no necesitaba los resultados de la acción
i. Pero en este caso quiero
devolver alguna forma de mando para decir llevarme de
vuelta a la página en la que estoy. Por eso dije tarea, resultado de
acción aquí. Retinol acaba de hacer la redirección
a la página sin ningún valor. Así que sólo te estoy mostrando
los diferentes escenarios. Una vez que te
pongas cómodo, empiezas
a escribir el código a nivel experto,
entonces estarías como, vale, sí, veo
como todo va juntos y sostengo
todo funciona. Tomemos este otro Delete o esta alternativa eliminar
código para una prueba de ejecución. Tan bien tomó
autos y luego está bien, podemos arreglar este
problema de visualización más adelante. No hay problema. Haga clic en Eliminar. Aquí está nuestro pronta. ¿ Estás seguro de que
quieres eliminar este registro? Si hacemos clic en Ok,
va, causó el manejador, el borrarlo leía
Eric al pH. Así que vamos a crear
otro auto de prueba. Algún año aleatorio. Voy a poner un punto de descanso. No estoy en modo de debug. Déjame ir al
modo de debug y luego podemos poner un punto de interrupción para
ver qué pasa. Cuando hago clic en Eliminar. Recibo el clic del prompt, Ok, entonces procede a
llamar al manejador. Entonces, una vez más, supo dónde buscar porque le dije el formulario, usar ese método en particular y pasar por encima de ese ID de ruta
en particular. Y esta es la solicitud de método, el método a utilizar. Los tres de estos
se combinan para dejar que se presente el formulario
nulo que quiere. Debería golpear a este manejador y al lado
de codificación de este manejador, el nombre sugiere que es, es un, un 100 supuestamente para
manejar este escenario. Este escenario es que quiero
eliminar este auto, identificaciones de
autos tres, de acuerdo, por lo que vemos que el ID de
ruta va por encima. Bueno, obviamente
llamó al auto en la datos o
encontrará
la base de datos actual, lo
eliminará, y luego redirigirá
a la página en la que está. Así que déjame golpear a
F5 y ya ves que
acabas de leer Eric
sin ningún ajetreo. Muy bien, así que acabo de
arreglar rápidamente la pantalla es que estás teniendo aquí
con los botones. Y es una solución realmente simple. Probabilidad, incluso un HUC, dependiendo de cómo lo mires. Pero en lugar de poner
las etiquetas de ancla lado viejo, acabo de poner todo en la forma porque la forma es
lo que estaba rompiendo las líneas. Entonces acabo de poner las etiquetas de anclaje
dentro del formulario y eso es realmente saber consecuencias porque al final del día, sólo el botón
hará el envío. Si hago clic en Editar, simplemente
se alejará. Si hago click en Detalles,
navega lejos. Entonces si hago clic en Eliminar, me solicitan
efectivamente cancelado. No pasa nada. Y luego si hago clic en Ok, hemos visto lo que
pasa. Esto es agujero. Puedes empezar a trabajar un poco de JavaScript en el
nodo para empezar a ver, vale, bueno, esto es
lo que se supone que debe hacer. Cuando volvamos, te voy a mostrar un poco
más de JavaScript. Empezaré a diseñar nuestras páginas porque vemos que nuestro botón
Crear está arriba. Parece un enlace. Empezamos a
mirar total para dar
estilo al botón Editar, la lista de botones sigue siendo un enlace. El detalle tiene dos enlaces. Entonces, cuando volvamos, veremos un aviso de
confirmación más robusto. Vamos a estar usando esta
biblioteca llamada Sweet alert. Eso es uno. Y cómo podemos usar JavaScript
o jQuery para conseguir eso en. Y dos comenzarán a
estilizar un poco más los RPGs.
14. Uso de vistas parciales y mejoras de la UI: Muy bien, bienvenido de nuevo. Entonces nuestro objetivo para esta
lección es un estilo todos nuestros enlaces para lucir un
poco más amigables. Y lo que queremos hacer es poner en una confirmación un poco más robusta en la eliminación al menos. Empecemos. En primer lugar, vamos a crear el
cambio y crear enlace. Déjame saltar del modo de depuración, ir a mi archivo index.html, y aquí está el botón Crear. Entonces vimos que todo lo que tenemos que
hacer por nuestras etiquetas de anclaje es darles la clase BTN dash. Soy primaria para el Create. Vamos a ser un poco más creativos
allí momentos en los que tal vez quieras pensar en
poner los iconos ¿verdad? Así que a veces no
quieres que toda la palabra edite o toda la palabra detalles. Y incluso puedes quitar un poco
estos iconos de tubería. O incluso como el Create que probablemente
querrías y es un
signo más en su alma. Lo que podemos usar para eso
sería Font Awesome, que es una biblioteca que
tiene una serie de iconos. Y podemos mirarlo rápidamente. Si saltas a Font Awesome.com y estamos viendo los iconos en la versión 4.7, verás que tienes bastantes iconos
que puedes usar. La mayoría de ellos son gratuitos. Es posible que tengas que
pagar o inscribirte en alguna cuenta que
tengan, pero eso está bien. Pero en este momento, hay
tantos íconos que te
sacas de la caja que
es realmente genial. Entonces si quieres un signo más, estoy seguro de tener un uso
Pelosi de plus. Creo que tienen como un frijol o basura o algo
para significar eliminar. Pero tienen bastantes
iconos que podemos usar con el
fin de solo mostrar
ciertas cosas. Ahí vamos, basura. Por lo que a veces quieres un ícono. Ahora, ¿qué
crees que podrías ser? Se llama
otra cosa, pero no hay problema. Veamos cómo podemos integrar
esto en nuestro proyecto. Volver a nuestro código. Podemos hacer clic derecho dub, dub, carpeta raíz dub. Y luego podemos agregar una biblioteca del lado del
cliente. Cuando hacemos eso, sólo
tenemos que escribir en fuente. También muchos asientos ya tipo
de relleno adeudados por nosotros. Así Font, Impresionante, selector de iconos. Y entonces ese no es el 101. No es un icono de peaker. Déjame intentarlo de nuevo. Así que solo estoy quitando la ubicación objetivo. Permítanme en realidad sólo
asesorar y empezar de nuevo. Así que agrega biblioteca del lado del cliente. Simplemente escribiré fuente, y ahí está,
guión de fuente, Impresionante. Eso es lo que quiero. Cuando hacemos clic en eso verás va a decirles a
los que
vamos a estar poniéndolo en
la ubicación objetivo de dub, dub, dub route slash
font. Impresionante. Pero me gusta que todas
mis bibliotecas de terceros estén
organizadas en el mismo lugar. Entonces en cambio voy
a decir dub, dub, dub route slash, LIB slash Font. Impresionante, Ahí es donde quiero. Pero estos son todos los archivos
que vamos a conseguir. Y no voy a
modificar nada de eso. Voy a elegir archivos
específicos. Sólo voy a seguir
adelante y golpear Instalar. Y luego
descargará lo requerido para mí y lo agregará a la
carpeta que especifico. Ahí está, Font Impresionante. También tenemos un archivo
adicional en forma
de este
Lindeman dot JSON, que básicamente es
simplemente llamativo decir que estas son las bibliotecas que
has utilizado el gestor de
biblioteca cliente para instalar. Muy bien, eso se ve bien hasta ahora. Saber lo que necesito hacer es todo
el diseño sepa
que también debe incluir recursos
Font Awesome. En el área de la cabeza donde
puse todas mis hojas de estilo
justo encima del bootstrap. Fui a poner en la hoja de
estilo para la fuente. También. ¿De dónde obtengo
esta hoja de estilo? Está en la carpeta lib, carpeta Font Awesome, carpeta CSS. Y entonces verás todo
todo el punto Min es una especie de
colapso en la deuda. Entonces en lugar de usar el todo
usamos la versión minificada. Ya discutimos
la diferencia entre la versión única
y la minificada,
correcta, por lo que sólo vamos a hacer eso. Por lo que incluimos ese
expediente justo ahí. Con esa inclusión, puedo No, seguir adelante y mirar
cómo puedo usar mis iconos. Si vuelvo a saltar a la página web y
miro los ejemplos, entonces me mostrará cómo se ve
la sintaxis
y es realmente simple. Todo lo que necesitamos es una etiqueta I
y luego una clase con FA. Y luego si un guión, sea cual sea el ícono
que estamos buscando. Sí dijimos que queríamos
como una basura para la eliminación. On. Aquí hay un ejemplo práctico. Tienes la etiqueta ancla, y no
configuraron la etiqueta ancla, tienes ese ícono. Entonces lo que sea
que tome el uno, ahí es donde se obtiene ese ícono de
anfitrión al lado de casa. Ese libro dijimos biblioteca, etcétera para que puedas ser muy creativo y usar estos iconos
como te parezca conveniente. Entonces aquí hay algo práctico que vemos aquí
tenemos la papelera. ¿ Cómo obtengo la papelera? Vale, es basura. Así que
sólo voy a pedir prestado esto. Saltar a nuestro código. Entonces en el botón eliminar
en lugar de la palabra eliminar, solo
quiero el
icono para la papelera. Para editar. A lo mejor sólo quiero y
déjame ver cuál es el testimonio. Entonces creo que si no me equivoco, la inteligencia
realmente comenzará a llenarse u opciones basadas en el hecho de
que incluyamos el CSS. ¿ Y si quisiera
un libro para editar? Déjame ver si hay una edición. Editar. Hay uno explícitamente para editar. Y luego para detalles probablemente
podamos usar algo como déjame ver si hay algo
para los detalles. No, entonces podemos usar bulk o un viejo
guion de libros Open. Ahí vamos. A veces puedes,
tendrías que sentarte y explorar las diferentes ideas de íconos
o las opciones más bien. Y luego te
acercas a la tuya basada en lo
que quieras transmitir al usuario. Así que sólo voy a previsualizar
rápidamente esto. Cuando echamos un
vistazo, vemos que, vale, esto parece una edición. Este es un libro abierto. Yo sostengo. Mi usuario inferiría que este es el aspecto de los detalles más y luego el
ícono de la papelera no aparece. Así que si salto hacia atrás, a veces también basado en la
versión de la fuente Awesome file que estás usando ciertos campos son ciertas clases
podrían no funcionar. Así que como basura dot dash o podría no funcionar pero
discontinuado basura mi trabajo. Así que déjame que acabo de hacer
ese cambio refrescarse. Y ahí vamos. Así que estamos haciendo que nuestra
papelera luzca mucho mejor. Solo te estoy mostrando
que estas son formas que
puedes usar para condimentar cómo serán tus pantallas si no quieres
confiar solo en los iconos,
porque no todo el mundo podría inferir lo que nosotros quieren que
de solo los iconos y siempre
se puede editar el icono de
texto luego la palabra editar detalles y eliminar. No se diga que no
fue muy fácil de usar
porque no
sabías lo que
menos los
iconos MIT Boulder le aporta ese
poco estilo. Así que incluso para el botón Crear, el link create,
más bien solo voy a copiar eso que etiqueto. Y entonces esto está
creando un nuevo bot. Entonces arriba arriba, voy a
ver ¿hay un signo más? Hay un signo más. Entonces si un guión más refrescar, y vemos que plus
inscribirse periodos. Entonces es así como puedes empezar
a sacar al corruptor a tu pantalla de tu aplicación usando estas bibliotecas
de terceros. Puedes pasar por. Desafía a
rediseñar estas páginas, ponerme en el buck para enumerar un poco más robusto en los detalles. Ella es la editora y el
dinero para enumerar aquí y vamos a necesitar ya está
haciendo lo que tiene que hacer. Puedes seguir adelante y hacer eso. Por lo que espero que
asumiera ese reto y
que siguiera adelante y aplicara algo de creatividad
a las otras páginas. Pero te voy a
mostrar lo que hice. Y así podemos comparar
notas en la edición. Todo lo que hice fue agregar
esto de nuevo a la lista. Ahora observa que esta lista
anterior de dos es, es un golpeado con una bobina
primaria o ambas. Sólo tiene esa mirada
cuando me pongo sobre ella. Eso se
logró fácilmente mediante el uso BTA y la línea de guión, guión primario. Por todas las páginas que tenían el dólar para listar el
enlace hacia abajo en la parte inferior, lo que hice fue moverlo
fuera de la DV estaba adentro, ponerlo en el
mismo div que el botón Enviar, y luego darle el btn,
btn esbozar primaria. Y todo lo demás
permaneció intacto, pero le di icono de flecha izquierda. Aún entonces, perdí una oportunidad
aquí con la entrada. Entonces la entrada no
puso en ese icono. En la entrada. El botón guardar es solo una
entrada no es una etiqueta de botón, es solo una etiqueta de entrada. Si quisiera poner
en algo para decir que está guardado y no
podría usar la entrada. Lo que tendría que
hacer es usar el botón. Vine a mostrarte
lo que hice y me estoy dando cuenta de que si
tuviera más espacio para
mejoras para poder
cumplir con ese botón y
darte la clase btn,
btn dash advertencia. Y luego los botones
pueden tomar un tipo. Y éste sería un botón
Enviar. Eso está bien. Pero entonces por su ícono, veamos qué ícono
podría usar aquí. Si es, hay un Save, vale, si guardo y creo
que eso nos va a dar ese disquete, este ícono de aspecto. Entonces después de hacer esos cambios, termino con ese
botón de guardar versus las entradas. Así que solo
te estoy mostrando cómo puedes usar diferentes etiquetas para lograr
la misma funcionalidad. Por lo que ahora puedo eliminar esa etiqueta
de entrada o esa entrada. Sí y no. Sólo tengo este guardado con
ícono o arriba para enumerar. Una vez más, esa
pequeña animación hover se logra solo
por falta BTN, guión de
contorno, y luego tienes la misma
advertencia primaria, peligro, etcétera yo estaba en un proceso. Te
veré en que cada página que tenía el buck to list link, todo lo que hice fue moverla
al mismo grupo de formularios que el botón para
el envío. Entonces esa es la
página de actualización en el Crear. Hice lo mismo para
poder conocer el mismo tipo de modificación aquí con
el botón Crear. Sólo voy a hacer eso
mientras todos estamos aquí mirando. Tomado ese botón y esto
es casi tan sencillo copia NPS solo la
diferencia
sería que esto sería primario. O puedo hacerlo
algo más como el éxito porque es un Create, así que es éxito, crear. Y luego puede tener también
el ícono de guardar. Podía ver si hay
algo más que me vendría bien. No puedo pensar en
nada más este momento, así que lo dejaré con
la página Guardar, la Crear. Clip hasta la lista dos y
hago clic en Crear nuevo, obtengo ese botón verde. Ese buck para enumerar. De acuerdo, entonces para mi página de detalles donde tuve la edición y volver
a Listar los mismos principios. Entonces este es el
mismo botón que viene de la
página de índice para el Editar. Y entonces esta es la
misma lista de bucket que hemos estado usando. No, hay una pequeña diferencia
sintáctica en el discurso de detalles donde el
ID de ruta del tablero ASP por supuesto es
model.py car dot ID. Entonces esa es una diferencia
entre lo que habría sido y lo que tenía que
escribir lo que había en la página de índice más bien frente a
lo que tiene que ser en esta página. De lo contrario. Ahora estamos empezando a ver cómo podemos añadir un poco, vez más carácter
a nuestra aplicación. Ahora que sabemos
integrar bibliotecas de terceros, lo último que
vamos a hacer es usar alertas
dulces para manejar
la confirmación para
el Delete en lugar
del script Java estándar pronta que
actualmente estamos utilizando. Paso número uno, encontremos
nuestras dulces alertas Biblioteca. Haga clic con el botón derecho www root otra vez,
agregue biblioteca del lado del cliente. Y sólo voy a escribir dulces alertas ahí
está apareciendo. Sólo voy a seguir
adelante e incluir eso. Y luego una vez más estoy
cambiando la ubicación. Quería dub, dub,
dub o root slash lib slash
slash sweet alert. Adelante y pulsa Instalar. Se actualizará o
gestor de biblioteca o un archivo lib man. Por lo que ahora sabemos qué
biblioteca adicional se ha agregado, pero también obtenemos los archivos o el archivo
agregado al proyecto. Sepan que eso está en su lugar. Vamos a saltar a nuestro archivo de diseño e
incluir el guión. Entonces la razón por la que vamos
a incluirla en el layout y no en la página
ni en la, ya sabes, exactamente donde eso si lo
queremos en múltiples lugares, entonces tendrías
que repetir esa inclusión en todas partes, que no necesariamente quiero. Por lo que sólo voy a incluir la amenaza
por encima del sitio SIG. Simplemente agregaré esa etiqueta de
script donde el SRC es igual a. Voy a saber que está en la
barra de lib asientos barra de alerta. Todo eso estaba abajo por
inteligencia. Agradable y limpio. Es decir, no, podemos acceder a esa biblioteca de alertas dulces desde cualquier lugar de nuestra aplicación. posible que lo desee en
diferentes páginas. Cuando tienes
diferentes archivos de índice, quieres tener el mismo
tipo de funcionalidad de eliminación. Puedes, puedes
hacerlo en todas partes. Cuando vuelvo
a mi página de índice, necesito configurar una
sección para un guion. Ahora, esto es algo
que ya vimos porque en nuestra página Crear, era su sección
para guiones. Entonces déjame darte un
trasfondo en cuanto a lo que es
esta sección lo
puedo resaltar en. De acuerdo, queríamos incluir
los guiones y así sucesivamente, pero no expliqué
del todo por qué la sección está ahí y
no solo incluimos los guiones. Volviendo a nuestra vieja página
alelo, notarías que
tienes diferentes secciones, por lo que tienes el tipo de datos de vista. Ya establecimos para
qué sirve eso. También tenemos el cuerpo de render. Ya establecimos
que ahí es donde todo el contenido dentro de nuestras vistas, se va a renderizar dentro de todo
el layout posteriormente, no, verás que
también tienes una sección que dice render sección
llamada scripts, y no se requiere. Esto permite que siempre que
queramos poner en un script, podamos invocar esa sección, poniendo ese
script jQuery
JavaScript personalizado o lo que sea. Y cuando la página
de un todo se renderiza, ese área de guion
se rendería debajo todo lo demás o relativo a su posición
en la pieza Leo, ahí es donde se
renderizará. Esto es importante porque recuerden
hablo de dependencias. Jquery, entonces, entonces bootstrap
tiene una dependencia de jQuery. Eso significa que no puedo poner
la inclusión de arranque o referencia de escritura
por encima de jQuery porque entonces lo que Bootstrap necesita hacer no
estará disponible porque
jQuery no estaba disponible. Al igual que con la dulce alerta. No puedo llamarlo una dulce
alerta si no tengo la biblioteca de alertas dulce ya disponible en el momento en
que estoy escribiendo mi código. Si bien tenemos que hacer
es asegurarnos de que
tengamos todos nuestros scripts que
se necesitan en todos los ámbitos,
todo en nuestro diseño y luego
en nuestros puntos de vista cada vez que
necesitemos un script o personalizado
referenciado a otro script, nos aseguramos de que
lo ponga en sección. Volviendo a uno de
los foros existentes, el razonablemente a hacer
los scripts de validación es
que los scripts de validación son ambas bibliotecas relacionadas con jQuery. Estaremos llamando a la funcionalidad
jQuery antes de que exista el archivo jQuery. Lo pone en esta
sección para que cuando toda la página de diseño se renderice con todos
los guiones y la
novela y así sucesivamente. Jquery ya está en la página. Entonces para cuando se carga el formulario, los scripts de validación jQuery se cargan después del jQuery. En nuestro caso, queremos asegurarnos de que
llamamos
a nuestro dulce código de
alerta después las bibliotecas de alertas dulces
no estén en un pitch en la sección de ciencias a la
que fui. Mira, quise abrir y cerrar
la sección de guiones. Entonces aquí puedo empezar a escribir mi propio JavaScript personalizado o
jQuery o lo que quiera. En esta situación, necesito un evento jQuery
para ver cuándo se
está enviando el formulario. Muy bien, así que
leamos esto juntos. Veamos si va a funcionar, pero solo te voy a
guiar por lo que estoy haciendo y podemos
arreglarlo a medida que avanzamos. Entonces signo de dólar,
estamos usando jQuery. Así que una vez más, no puedo estar
usando el código jQuery hasta que la biblioteca jQuery ya
exista y haya sido invocada. Sólo voy a signo de dólar C. Poner en esa función
punto la función global abierta y cerrada, corsé punto y coma. Y luego dentro de
esta función o puedo empezar a escribir
mi código personalizado. Así que signo de dólar, y estoy
buscando un envío de formulario. Por lo que sólo voy
a decir formulario presentar. Entonces en un formulario de envío, queremos que el teléfono Shun. Y fui a darles a dos
un parámetro llamado E. Así que E es como un argumento de
evento para ver, bueno, represento el evento
que está a punto de suceder. Por lo que estás tratando de
presentar el formulario. E tiene la información para todo lo que está a
punto de pasar. Lo primero que
quería hacer es decirle E dot prevent default porque la operación por defecto de un envío de
formulario es enviar. Quería pausar eso porque estoy a punto de
preguntar, ¿Estás seguro? Muy bien. Entonces el botón
recuerda que estamos agradando a esta materia sin hacer clic
con las dulces alertas. Por lo que hace clic en el botón, quiero pausar el comportamiento predeterminado
del envío del formulario. Y entonces voy a ver swale, que es mis dulces alertas, mientras que es corto para alertas dulces. En lugar de esos tirantes abiertos. Y luego voy a,
solo, en JavaScript,
la sugerencia de código no
es tan poderosa como HTML y CSS y C-sharp. Entonces lo que intenté
hacer es cuando abro algo que cierra a la misma
hora y pongo el punto y coma, así que no lo olvido más adelante. Swale toma algunos
argumentos y si lo desea, puede buscar la dulce documentación de
alerta. Siempre es bueno
mirar el documento es. Así que cuando no estés seguro, pero por ahora solo continuaré y
solo lo veremos aquí. Entonces fui a ver, ¿estás seguro? ¿ Este es el título de la pronta? Como? Entonces tenemos el texto, que será el mensaje real que la persona va a ver, que es lo que voy a
ver como lo que teníamos antes. ¿ Estás seguro de que
quieres eliminar este registro? Ir a ver ícono. Icono es advertencia,
por lo que sabe que este es un momento muy serio. Voy a decir
botones igual a verdad. Así que las alertas dulces
realmente pueden ser como un pop-up para
decir, está bien, esto sucedió. clic fuera y dices, bien, cuando dices botones, sin embargo, por defecto te va a
dar la archaea y cancelar tipo de prompt como
lo que vimos con el onclick. Entonces también vemos que un modo de
peligro es cierto. Observe que cada línea termina con una coma porque esto es como un edificio o
para todo el objeto. Tenga en cuenta que tenemos el
dulce objeto de alerta que
Bill dijo
que necesitamos seguir viendo. Entonces. El entonces parte va a ser como un delegado notas para
ver, ver la entrada
del usuario. Los insumos se almacenarán en
cualquier variable que pongamos. Entonces confirme. Estoy viendo entonces mira
para que lo confirme. Si hago clic en Aceptar. Confirmar es cierto. Si hago clic, Cancelar luego
confirmó su falso. Eso es más o menos lo que es. Y hacemos ese mismo tipo de expresión
lambda en esto. Entonces esta es una
función delegada donde solo estamos haciendo una función sobre la marcha para ver luego continuar disfunción contra
la variable confirmar. Estoy viendo si confirman. ¿ Qué queremos
hacer si se confirma. Entonces si confirmar es básicamente
ver si este valor es cierto, si decían, Ok, entonces ¿qué queremos hacer? ¿ Qué quiero hacer? Si dijeron confirman, entonces quise decir
este punto someter. Estoy pausando el comportamiento
predeterminado, pero luego estoy viendo, bien,
bueno, adelante y preséntelo. Si decían que sí, declaremos esto para un giro. Muy bien, así que he
ido adelante y sumé algunos registros adicionales
para que podamos probar. Así que sólo voy a decir
eliminar y oh, chasquear, no
eliminé el prompt
original, pero déjame simplemente hacer clic en
OK y continuar. Y luego ves aquí está
nuestra alerta de suites. Mira, oh, bonito. Eso se ve. ¿ Estás seguro de ese
simpático ícono? Sólo te avisas que
oye, peligro por delante. ¿ Estás seguro de que
quieres eliminar este registro? Si hago clic en Aceptar. Está bien, sigue siendo un
estímulo, así que tenemos que ponerlo en un poco más de diversión para que sepa
exactamente lo que está pasando. Lo que está sucediendo es que porque cada uno de estos
botones de eliminación es un formulario. Al hacer clic en Eliminar, está viendo todos
los formularios, la página. Y entonces es por eso que ese prompt viene varias veces. Entonces no hay problema, estamos explorando lo que hay que ir en su lugar para que esta
cosa funcione correctamente. Entonces en primer lugar, vecino
mueve esto onclick. Ahora que tenemos
las dulces alertas, no
necesitamos que el
navegador por defecto prompt. Sabemos que tenemos una interfaz agradable
más limpia para usar un
método alternativo para imprimir formulario por conferencia
que veo imprimir fuera forma para cada botón
sería difícil una forma. Y luego veremos
en el botón, por favor. Sólo estoy
mostrándote todas tus opciones. Entonces vimos que esto funciona
el prompt predeterminado, y si te sientes cómodo
con eso, no hay problema. Pero luego a veces
cuando empiezas trabajar en otras bibliotecas, comienza a tener que hacer compromisos en el camino
con todo tu diseño. Muy bien. Vamos a trabajar en combinar nuestro conocimiento de cómo funcionan los
formularios en espera los trabajos de
publicación en todos
los datos necesitan estar
sentados antes de que se pueda
presentar la presentación. Lo que quiero hacer es
crear una instancia de la granja en lugar de tener tres registros y tres foros
diferentes, quiero tener sí, mini botones eliminar como muchos botones Borrar dice,
hay registros, pero vamos a
usar un formulario para ejecutar el comando delete a. Voy a tomar esta
forma y la voy
a colocar debajo de
la mesa por sí sola. Así que sólo estoy cortando las
etiquetas de formulario y
poniéndolas por sí mismas. Fui a quitar esto
es b root car id. Y en cambio le voy
a dar una entrada, igual que lo que vimos en
el origen o eliminar. En la forma de plomo originalidad. Teníamos una forma en el
fondo del terreno de juego. Teníamos eso oculto, así que
sólo voy a copiar
eso para que tengamos un
punto de referencia. El tipo de entrada está oculto, es antes de que no tengamos ninguna propiedad ni nada
en el modelo llamado auto. No puedo ver una identificación automática de tarjeta
para la ASP para en cambio, solo le voy a
dar un nombre. El nombre aquí es identificación del coche. Ahora, ¿cuál es la
relevancia del nombre? ¿ Cuándo tenemos un formulario? ¿ Algún formulario? Recuerda que cuando
hicimos la página HTML básica, hablamos duplicó el nombre
y por el nombre, viste las cosas
pasando por la URL. Es el mismo principio
excepto ASP dash four se encarga de
nombre e identificación para
o.Así que notarás que
nuestras etiquetas de entrada aquí, no
teníamos que ver
rodilla sería suficiente para verla ID todo lo que tenemos que ver como entradas y establecer la clase y el tablero ASP para hueso hizo herramienta, el nombre de la propiedad para el nombre del modelo
sería el reemplazo
para ASP dash four. Así que realmente y verdaderamente
lo que se imprime es id es igual a Nombre del punto del coche, nombre es igual a Nombre del punto del coche. Podemos dar manualmente nuestra
propia etiqueta, su propio nombre, que correspondería con el mismo ID de ruta que teníamos o el mismo parámetro de ruta que el método post en realidad está
esperando ver el ID del coche aquí. Ideas de autos y también te
voy a dar el id, identificación del coche para que podamos acceder a
ella a través del jQuery. Entonces esa es nuestra forma. Ni siquiera necesita
un botón de enviar porque tenemos el botón aquí. Nosotros sí, sin embargo, necesitamos saber el ID del botón
que se está haciendo clic. Así que sólo voy a agregar
otro atributo de datos. Una vez más,
solo estamos explorando todos
los compromisos y todas las cosas bonitas
que podemos poner en. Hay un atributo
que podemos poner en el botón llamado data dash ID. Y luego podemos darle el
mismo valor de artículo, dot ID. Conoce que los enlaces tienen sus
identificaciones y cada botón que se va a duplicar
como botón de enviar
tendrá su propio ID. No, tenemos que mirar para un clic de botón en lugar
de una camarilla de formulario. Para eso, puedo decir fácilmente, darle a esto una
clase personalizada, eliminar btn. Por lo que cada botón de borrar será identificado como delete btn
dentro de mi jQuery. En lugar de mirar para un envío
completo del formulario, puedo saber decir Dot Delete btn. Así que ten cuidado con un evento click en cualquier elemento que tenga
la clase delete btn. Entonces ya ves cómo eso va
a venir a todos juntos. Siempre que se haga clic en eso, no
hay defecto. No tengo que
evitar impagos, así que sólo voy
a eliminar eso. Mostrarte una vez más contexto. ¿ Por qué escribimos el código sobre
las diferentes circunstancias? Por lo que no hay forma
para que presente. No tengo que evitar el comportamiento predeterminado
de un delete btn click. No obstante, lo que sí
necesito hacer es rápido, lo que todavía va a suceder. Entonces si confirman, lo que voy a hacer
es y tengo que darle una identificación a este para que
pueda identificarlo. Por lo que en cualquier momento necesitamos identificar un elemento en
JavaScript o jQuery, podemos usar la clase
o podemos usar el ID. Por lo que esto es borrar formulario. Voy a ver uno
que el valor que debe obtener
la entrada
debe venir del ID de datos
del
botón en el que se hizo clic. Así que déjame simplemente hacer todo
esto paso a paso. En primer lugar, vamos a conseguir los botones. Por lo que puedo decir var btn es
igual a signo de dólar. Esto. Este soy yo diciendo
que este es el elemento. Se trata de un objeto
que representa los
elementos que
activaron el evento. Ese es el paso número uno, herramienta. Var id es igual a y luego
puedo obtener el ID de
los datos btn dot. La razón por la que utilicé los
identificadores de guión de datos que de hecho consultan se puede enlazar fácilmente a ese
elemento de datos y obtener esa clave. Obtener el valor basado en la clave. Estoy viendo datos btn dot, y luego consígueme el valor que se está almacenando
con el ID de clave. Y ahora tenemos el DNI o identificación del coche que corresponde con
un botón en el que se hizo clic. Saber después de tener todo eso, fui a establecer el valor
de los elementos ocultos. Entonces dólar firma comillas, hashtag y su auto ID dot val. Y entonces solo te voy
a dar el DNI. Conocer el valor de este
oculto se
establecerá cualquier ID que estuviera en
el botón eliminar. Entonces después de hacer todo eso, ahora
puedo ver el
hashtag de signo de dólar, borrar formulario. Usas el hashtag para
ID al igual que con css, dot full class hashtag o libra o el número
que dice para ID. Por lo que voy a ir por
el formulario de eliminación por ID hasta que
siga adelante y presente. Adelante y lleva a cabo
tu comportamiento predeterminado después de haber configurado
tus datos para ti. Así que declaremos esta, esta versión de la misma para un giro. Podemos hacer click, Eliminar, obtenemos nuestro aviso, hacemos clic en
Aceptar, y mira eso. Está funcionando, ¿verdad? Entonces todo lo que hicimos fue
en segundo plano. Una vez más,
creamos una etiqueta de formulario. Por lo que incluso si inspecciona elemento, se nota que en la
parte inferior de la tabla. Entonces tenemos cuerpo y déjame entrar al
div, eso es un contenedor. Y luego tenemos la
mesa y luego tenemos nuestro formulario C. No es
diferenciar en la página. No parece que
estuviéramos en conspicuo cuando se adjuntaba a
cada botón, pero no, es sólo una forma en la página, por lo que no hay confusión en cuanto a qué forma se está haciendo clic, que botón que para mí
está tratando de ser presentado. Ya no hay confusión. Sólo hay una forma. Y luego si
miras cada botón, verías que el ID de guión de datos tiene el ID correspondiente
con todos los demás enlaces. Entonces esto es ID cinco. Cuando se hace clic, obtenemos el botón en el
que se hizo clic. Obtenemos el id Entonces lo ponemos
al elemento oculto. Después seguimos adelante y nos sometemos. Y luego el formulario
sabe que debe ir al manejador Delete
con un método de posts y está pasando por encima ese valor oculto llamado Car ID. Una vez que todo eso esté en su lugar, se golpeará el on post delete con el ID de ruta a esperar. Y lo que sabemos
se supone que debe hacer todo eso, todas esas mejoras
cada vez que estamos poniendo en bibliotecas de terceros y
quiere usarlas, ya sabes, tenemos que tomar ese tipo de diseño decisiones a medida que avanzamos porque se puede pensar
que va a funcionar o puede funcionar en una situación particular. Pero luego cuando añades
otro código y bibliotecas, es posible que tengas que agregar
algo más de diversión. Simplemente modifique su
refactorización de código a medida que avanza. Entonces eso es todo por esta actividad. Nos vemos en la siguiente lección.
15. Agrega cambios a GitHub: Muy bien chicos, bienvenidos de nuevo. Esta lección
va a ser corta. Todo lo que vamos a
estar haciendo en éste es revisar los cambios de orden. Entonces empezamos a usar
GitHub algún tiempo saber. Y lo que hicimos fue
comprobar en nuestra inicial, cuando llegamos a
cierto hito, comprobamos todos
nuestros cambios. Queríamos volver a hacer eso. Las garrapatas rojas indican
archivos que están pendientes, cambios o ediciones. El plusses verdes representa los que
se han cambiado y los candados azules básicamente representan los que no
han cambiado. Todo lo que tenemos que hacer es
ir a conseguir cambios. Una vez más, si no ves
dónde está en mi pantalla, siempre
puedes ir a Ver
y hacer clic en Obtener cambios. Entonces ese paquete te mostrará cada archivo que se
ha agregado solo para bibliotecas de terceros
que agregamos están todo ahí. Y nuestro archivo de migración
y o archivos de entidad. Así que sólo voy a
dar un mensaje rápido. Si bien el mensaje no
necesita ser un ensayo, por lo general
me gusta ser
lo más descriptivo
posible en mi mensaje
para que cualquiera que lo
lea consiga
la gist de lo que
estoy haciendo en esta
versión, commit. Después de hacer eso, sólo puedo
decir comprometerme todo y hundirse. Una vez que ese gameto se haya completado
con éxito, verás ese mensaje. Y luego cuando volvamos
al Explorador de soluciones, todo
tendría candados azules. Cuando volvamos, empezaremos a extender un poco más nuestra
aplicación.
16. Gestionar cambios de base con Entity: En esta lección,
vamos a estar configurando nuestras otras entidades
para esta aplicación. Entonces en este momento lo que tenemos
es auto, que es esencial. Tanto todo lo que tenemos
para coche sería el año y el
nombre del auto. Sabes si has estado
alrededor de autos el tiempo suficiente, sabes que no es sólo un nombre tarjetas tienen una combinación de un manso
y un modelo, ¿verdad? Por lo que el manso sería la marca del auto como Nissan
o Lamborghini. Y el modelo sería modelado de esa marca,
¿estamos lidiando? Lo que queremos hacer es hacer
algunos cambios en la base de datos aquí. Y lo que tenemos que sacrificar es nombre y dividirlo
en make y model. En este punto,
querías hacer algunas
consideraciones de diseño porque es bastante fácil de ver. De acuerdo, quería
cambiarme esto y simplemente duplicaremos
eso y conoceremos a ese modelo. Y será bastante fácil
tener solo cuerda. Pero entonces considera esto, cuando alguien está entrando
un auto en tu sistema, ¿necesariamente quieres que
estén escribiendo en la leche
y escribiendo en el modelo? ¿ Y si tienes dos del mismo tipo de vehículos de la Meca y
modelo? ¿ Qué quieres que
estén escribiendo en la palabra Suzuki cada vez? Porque entonces tal vez el voto de
permiso o el error, uno de los SAT
lo anota o viceversa. El punto es que En ese punto se quiere
limitar la posibilidad de error humano al tomar datos a través de
nuestra interfaz de usuario. Si bien esta no es una decisión de la
interfaz de usuario, lo que hacemos aquí influirá en cómo diseñamos o interfaz de usuario. Por lo general hablando, en una forma cuando hay datos
que necesitan repetir, usaría una lista desplegable, lo que significa que
tendría una lista desplegable con todas las opciones
potenciales. No lo dejarías
hasta el usuario habitual para poder simplemente decir,
oh, aquí está el valor y
simplemente escribirlo manualmente. Para mí puedo modelar, me siento más cómoda
o al menos por MEK, que serían las
marcas porque eso es
más ácido que el modelo porque diferentes marcas de
diferentes modelos y combinaciones 0 para que
puedan teclear en el modelo, pero para el mic, personalmente, unas cuantas más cómodas
dándoles una lista de las marcas potenciales. Si no está en la lista,
podemos agregarlo a la lista, pero es mejor que
tengan esa lista. Y pueden escribir en el modelo relativo a lo que
eligieron de la lista. Eso nos va a obligar a hacer algunos cambios clave en la base de datos. Porque si necesito una lista de mic, no
puedo estar viendo cadena cumplir. Ahora de lo que vamos a
empezar a hablar de lo que
llamamos claves extranjeras
y claves primarias. Por lo que ya sabemos que ambos
son clave primaria. Muy bien, pero ahora necesitamos
otra mesa y necesitamos una llave foránea para esa
mesa que presenta en coche. Entonces vamos a crear esta nueva mesa. Entonces las migraciones, lo siento, nada de migraciones en
el proyecto de datos más bien, fui a agregar una nueva clase, y voy a llamar a
esta clase me el micrófono. Recuerda que estas, estas gafas son solo
modelos para lo que se programará una mesa con tener cola en las propiedades para lo que
queríamos almacenar nuestra tensión. Entonces, ¿qué querríamos almacenar tanto
a los mansos? En primer lugar, siempre tenemos
nuestra id int pública. entonces tendríamos
el nombre prop, top tub, nombres de cadena. Nombre aquí solo significa nombre como en el valor de cadena que va para la media en la tabla llamada mic. Hacer el número uno podría ser Nissan, hacer el número dos podría
ser Toyota, etcétera Así que eso es realmente lo que el
nombre aquí representa. Si quisieras ir y
decir Hágame personalmente, no sigo esa
convención de nomenclatura. Algunas personas lo hacen. No lo hago porque ya esté
en la tabla llamada mic, así que no necesito
verme nombre obviamente, nombre sería el nombre de cualquier valor que esté poniendo
en esa tabla ¿verdad? Ahora tenemos la
mesa principal, está bien. Tengo que dejar que los contextos de
base sepan que hay una
nueva tabla en tono. Acabo de ir a esa
línea Control D solo para duplicar
las partes duras. Pero fui a llamar a esta mezcla. También podría llamar a
este auto hace que realmente no
importa
lo que yo llame la mesa. Pero realmente me gusta
ser consistente con el nombre de la entidad y
el nombre de la mesa, ya que no lo ves
con auto y autos. Pero una vez más, puede que
no necesariamente te guste mi convención de nomenclatura y
quieres, aunque uno, entonces, no hay problema si quisieras nombrar a este
coche mic y auto mix o tienes la
entidad llamada Mika, esto llamado auto mixto
y eso está bien. Me gusta mantenerlos
consistentes porque conduce a menos errores
en la línea. Ahora tenemos una nueva mesa. Lo que tengo que hacer es dejar carnal que sea un
cuatro o que
tenga una clave foránea que hacer. Entity Framework hace
las claves extranjeras muy fáciles para nosotros. Lo que voy a hacer está bien, voy a dejar este
mensaje de validación para el modelo. Eso está bien. Pero debajo de todo esto, voy a poner otra
propiedad, int hacer ID. Estaba señalando
que Entity Framework, nos
facilita
introducir claves foráneas. Porque cuando decimos que
queremos un nombre de tabla e ID, automáticamente
inferirá
que queremos
decir que queremos una, una clave foránea. Entonces ese es el paso uno, al menos. Lo hace diciendo int mic
ID, sabrá que, vale, tengo una entidad llamada Mek, y sí tiene un ID, por lo que la combinación significa que debe
haber una clave foránea. Otra parte a esto sin embargo, es sumar nuestras propiedades de
navegación. Por lo que diríamos Make me
esta propiedad de navegación básicamente dice que si consigo un auto y quería
saber el micrófono del auto, hacer que los nombres estén realmente
almacenados en la tabla make. Entonces todo lo que realmente tengo
que bajar es ese auto
ABA y tiene hacer ID1. No sé cuál es
el nombre de ella, solo de la mesa del auto. Muy bien. Entonces, si estás acostumbrado a las bases de datos, sabrías a lo que me
refiero cuando miras en la tabla del auto o cuando
son claves foráneas, todo lo que estás viendo son los valores de
ID pueden causar ID1, luego car off mic ID1. Ya entra en C's make ID. No conocemos los detalles. Entonces al agregar esta propiedad
y en términos generales, agregamos como virtual para que pueda ser anulada si es necesario. solo puedas seguir
adelante y hacer eso. Pero cuando agregamos esta propiedad de
navegación, cuando recupero un auto, puedo decir por favor
incluya también todos los detalles de esa tabla adicional
o esa tabla relacionada. Entonces puedo traer
la propiedad del mic con todos los detalles. Cualesquiera que sean los detalles entraron en mí, tal vez ni siquiera pude
poner en algo para ver qué país es el micrófono. Decir si quisiera ser creativo, diría que esta marca
es de este país. Y entonces me encontraría con
el mismo tipo de tema de calidad de datos aquí si
dejo país willy-nilly, porque algo de Estados
Unidos de América podría ser escrito como
EU por una bursa, USC como otra persona, banda de Estados
Unidos
en la persona, etcétera Entonces es por eso que cada vez que
tengas algo que quieres controlar, querrás
ponerlo en su propia mesa y luego hacer una
llave foránea referencia a ella. Todavía no me voy a
complicar demasiado. Echemos un vistazo a tener dos mesas y estamos introduciendo
este concepto de clave extranjera. En este punto, coche sabe que debe
tener una clave extraña a la tabla donde la navegación o aseveró la
validación de modelos. Por lo que se requiere. También voy a
requerir que el DNI está
en se ingresa año. Podemos requerir un
año si queremos. También podríamos sentar más
validación en estas dos jeringa. Mínimo, mínimo para el año. Digamos que no queremos nada menos de 1990 en los sistemas. Cualquier cosa que sea 191990 o
antes de 1990 no es aplicable. Y luego máximo Vamos a
ponerlo a 2021. Estamos en el año 2021. Así que sólo
te estoy mostrando el rango. La validación realmente funciona. Permítanme espacio el mosaico puede ver todo en su propio espacio. Recuerda que todas
estas anotaciones, todas estas cosas necesitan
falsificar la base de datos para afectar el
paso número uno de la base de datos, o después de realizar esos cambios, el siguiente paso sería
agregar un migración. Todavía tengo mis comandos de
migración desde la última migración o el último conjunto de actividades
relacionadas con la base de datos. Sí recordamos una ciudad, un proyecto predeterminado
al proyecto de datos. Y puede presionar hacia arriba para obtener
los comandos anteriores. Sólo estoy presionando para
conseguir la migración add. Sólo voy a cambiar una falta. Por lo que hice mezclar mesa, presiona Enter y mi campo de construcción. ¿ Por qué fallé mi construcción? Bueno, eso es porque
eliminé el nombre y se
estaba utilizando
mucho en otras partes
de mi aplicación. Si estás codificando durante esto,
esta es una de esas
consecuencias de refactorizar en la aplicación
Ricci y algo que podrías tener
un efecto ondulación lo largo del resto
de tu aplicación. Así que mantengamos esto simple. En primer lugar, instituimos el formulario de
eliminación y así sucesivamente. Así que realmente no
necesito la vista Delete y esto eliminar punto CSS HTML. Entonces lo que voy a
hacer es simplemente eliminar esto, eliminar, eliminar combustible. No necesito esa. Bien para el crear. Lo que tendría que hacer es solo al menos temporalmente
comentar la zona. Por lo que
en cualquier lugar donde
se accediera al nombre de la propiedad en
cualquiera de sus vistas, solo
puede
seguir adelante y encontrarla. Estaba siendo utilizado aquí, entrar en totes,
entrando en totales aquí. Entonces no, a menos que
aparezca en la lista. La actualización también
se estaba utilizando aquí en la forma que solo puedes volver a revisar tu lista de errores solo para ver
dónde podrías haberte perdido. Y voy a hacer Control Shift y B para
hacer un construido solo para que se vuelva a compilar y ver si hay un error ahí
y no hay ninguno. Así que intentémoslo con la consola
Package Manager de nuevo. En audibilidad exitosa
y tenemos nuestra migración. Lo que hay en nuestra migración
uno va a cambiar el nombre de la columna
de nombre a modelo. Está bien, así que sólo
porque cambiamos la propiedad lo
va a ver como cambio de
nombre en lugar de eliminar. Muy bien, para nuestros asientos de ID Manso agregando la columna, es un int. No es un disponible, y
el valor predeterminado es 0. A pesar de que nos hubiéramos sentado
tres pulgadas para estar en 19192021. Entonces eso significa incluso
entonces, nunca debería conseguir este incendio donde la base de datos
tendría que establecer el valor predeterminado en 0 porque el cliente dijo que
siempre vamos a hacer la validación. Ya vimos que eso sucedió. Entonces va a
crear una tabla llamada mix con dos nuevas columnas, dándole la clave principal. Y luego mira esta parte. Está creando un índice. Un índice en una base de datos
es una búsqueda de alta velocidad. Entonces cada vez que
esperamos que los autos usando las ideas de make sean claves o
estamos usando eso para decir, dame todos los autos
con esta identificación única. Al crear este
índice en esa columna, lo hará muy rápidamente. También estamos agregando la restricción de clave
extranjera. Dice agregar una
clave foránea en los autos de mesa, el ID de micrófono de columna
donde
se mezcla la tabla principal y el principio
de las columnas ID. Entonces, en otras palabras, una
clave foránea significa que hacer que
el ID en el automóvil sea estable nunca puede
obtener un valor que
no esté disponible en la tabla de mezclas. No puedo estar agregando un auto que
no sea de tipo o no en
la mesa mixta mixta. Si está en la mesa mixta, me pareció que tienes tres íconos. Añadir un auto con ID TIN. Yo como que me acaba de poner un
auto que no está presente. Entonces eso es una especie de protección. Por lo que llamas a esa integridad de datos cuando estás
hablando de diseño de bases uno y para mantener esa integridad a través del diseño de
tu aplicación. Entonces entre todos
estos y validaciones, se
mantendrá
esa integridad de los datos. Una vez más, el método de domo
es básicamente el desmantelamiento. Entonces si tenemos que
deshacer la migración, esto es lo que hará para derogar los cambios
que habrían hecho. Y después de hacer todo eso, volvamos y
actualicemos la base de datos. Entonces esta base de datos de bits de resumen y la consola de Package Manager, ninguna parte ver algunas
flechas no son problemas. Entonces leamos
a través de estas flechas. Está viendo que no pudo
ejecutar el comando Alter donde está agregando la referencia a
la tabla de mezcla de claves foráneas. Entonces está en esa mezcla
tiene un ID de columna. Y en pocas palabras, sin, lo que pasa es que estas flechas tienden a verse muy complicadas. El texto, si no
estás acostumbrado, puede que no salga
como muy fácil de usar. Pero la realidad es que
si solo prestas atención, escogerás
ciertas palabras clave. Aquí mismo. Está diciendo que la altitud
fue el conflicto de Stephen por las restricciones clave extranjeras en la columna que estamos
entrenados para agregar, que se mezcla con
Manso ID más bien. Entonces, ¿cuál es el problema? El problema, pesar de que las áreas que realmente
están viendo eso, oye, este es el problema. Si vamos a la base de datos
y buscamos en la tabla de autos, recuerda que habíamos
entrado algunos autos. Había ingresado autos a nuestra base de datos en o
no tienen la idea de micrófono de
lo que están ahí. Y el ID de micrófono no puede ser
0 porque una vez más, el ID de micrófono no puede ser un valor que no existe
en la tabla de micrófono. Este es uno de esos peligros
cuando estás cambiando las bases de datos están haciendo migraciones. Voy a tener que
hacer una modificación. Y hay dos formas de hacer una modificación cada vez que estés introduciendo
una clave externa en una tabla que ya tiene datos, uno de los peligros
es que
vas a terminar con este error . Esta es una de esas buenas Aras, yo llamo a esto un buen
error del que aprender. Este conflicto se
debe a que estoy introduciendo una clave extranjera en una mesa que ya tiene reglas que
no necesitaban la clave extranjera. lo que se refiere,
esos roles existentes, roles están violando
las limitaciones que
se le está diciendo a la clave extranjera que debe tener. la columna de clave externa
se le dice que no puede ser nula y su
valor predeterminado es 001041. Lo siento, es un
valor inválido para nuestra clave extranjera. ¿ Por qué? Porque no puedes tener. Una clave
primaria coinciden con el valor de clave principal de 0. Entonces Manso ID nunca puede estar
en la mesa de make. Nunca pueden ser un valor de 0. Siempre tiene que
ser uno o superior. Nunca puede ser 0 al
intentar ingresar a IT pro, reactivamente en la
base de datos o después que ya
hay filas, está tratando de darles
el valor predeterminado es 0, lo que está provocando que conflicto del
que está hablando. Muy bien, en realidad puedo
modificar el archivo de migración aquí. O puedo eliminar la migración, cambiar el modelo,
y corregir el error. Por lo que sólo voy a mostrarles qué modificaciones
haría a la migración. Y eso sería cambiar lo conocedor de
falso a verdadero. Entonces en otras palabras, esto puede entrar, la llave extranjera, puede entrar, pero no necesariamente tiene que
tener un modelo. Los autos existentes simplemente
no sabrán qué modelo son. Más o menos no habría. Por eso nadie es cierto. Entonces tampoco tengo que sentarme al valor
predeterminado
porque se puede conocer. Entonces si no hay
valor, entonces es no. Si hay un valor,
entonces hay un volumen. Esa es la opción a. opción B, sería la opción E. Permítanme antes de continuar. Opción a, me permitiría saber realmente simplemente probar la base de datos de
actualización de nuevo. Y luego intentaría una operación de migración nueva y
editada, que sería agregar
esta columna como anulable. Y esos eliminan cualquier
potencial de conflictos. Entonces esa es una de las
opciones a la hora tener la migración generada. Eso no necesariamente cumple con los requisitos son que
necesita modificar esto,
modificar la migración,
e intentarlo de nuevo. No, otra opción sería, y probablemente elegiría esta opción porque es una opción
más segura en mi libro. Uno, quitar la migración. Así que sólo ve, está bien, olvida que te dije que
hicieras esta migración. Para ello, es literalmente
eliminar la migración de guiones. Siempre vi este comando
antes cuando hicimos la migración de anuncios y decía deshacer esta acción
usuario mover migración. Tenemos una migración
que es de calidad. Queremos deshacer. Por lo que acabo de ver eliminar migración. En realidad eliminará ese archivo de la carpeta de
migración. Después fui a
actualizar mi modelo para entonces tener reglas que
generarán una amarga migración. La regla que fui
a modificar es que fui a hacer que el ID del micrófono sea anulable. Otra cosa que
está influyendo en la
decisión Entity Framework de hacer esto un int que no es anulable es nuestra notación
para decir que se requiere. Esto va a
ser un segue perfecto en cómo vamos
a tener que separar
la validación a nivel de base de datos de la validación
a nivel del cliente porque en este punto estoy viendo requerido para el año y zona de
estar y Joe K, eso realmente no va a
afectar que una base de datos. Pero luego vimos dónde se
está
reflejando lo racionalizado en la
base de datos y el hecho que el modelo no sea anulable se está
reflejando en una base de datos. Entonces cuando hice esto anulable
en la interfaz de usuario, lo
voy a necesitar definitivamente, no
voy a subirlos
para proceder con la tensión. No obstante, en la base de datos de
ellos diciendo que es opcional, esos se están separando en
dos mundos diferentes. Las necesidades de UI son diferentes
a las necesidades de la base de datos. Solo tienes que tener eso en cuenta. Pero estaremos terminando
ese concepto en resumen. Después de eliminar la anotación
requerida y hacer el int y int, puedo saber seguir adelante y volver a
ejecutar mi migración. Y cuando hago eso, mi migración no
está viendo para la columna, es int, pero
es en nullable. No hay valor predeterminado. Eso no es problema. Todo lo demás está bien. Entonces cuando seguimos adelante y
actualizamos nuestro centro de base de datos, entonces es exitoso. Ya verás una vez más, análisis tiene que entrar en
lo que podría estar causando el problema tanto como el error realmente
no lo insinuó. Pero esa es una de
esas áreas que términos generales, si
ves ese error, sí cuida lo que podría ser los riesgos potenciales me
están
arruinando introduciendo una clave foránea en este punto en el diseño
de mi base de datos, porque esta va a
ser una actividad en curso. Como ves algo nuevo, vas a tener que editarlo. Bueno, es así de
fácil simplemente generar. Una migración estará
en la base de datos, pero luego se vuelve
más difícil por las reglas y
las limitaciones que se ponen alrededor de las
diferentes columnas frente a los datos existentes que
podrían no han sabido de las reglas en el
momento en que se estaba entrando. Eso es nosotros introduciendo esta
nueva mesa que asisten a saltar por encima y verás que tenemos la mesa y el auto estable. Si extiendo esto,
verás que en las llaves de los autos,
tengo la llave foránea
que acababa de presentar. Si miras el
nombre aquí frente al nombre en mi línea 39, verás que es el mismo nombre. Si los autos de subrayado gay en el marcador se mezclan en
el marcador Manso ID, ese es el nombre de
la clave foránea. Si miramos hacia arriba mix, veremos también
que tiene su clave principal. Entonces no o columnas
para autos sería la idea cuál es un modelo de año int
clave primaria. Y luego hacer que Idea note que el elemento
clave que no puedo al lado de él, lo que significa que es una
claves foráneas, claves primarias. Las llaves foráneas se ven así. Hemos agregado con éxito
otra tabla a nuestra base de datos. También tuvimos que
comprometer y eliminar algunas de las cosas de
nuestra interfaz de usuario, la facilitada. Cuando volvamos
vamos a tener que actualizar nuestra interfaz de usuario a
normalizar el nuevo campo. Campos porque
ya no nombramos conocemos nuestro
modelo y tenemos mic. Y también estamos
salieron a ver cómo vamos
a separar
las reglas en torno a lo que los usuarios pueden hacer en la interfaz de
usuario frente a las reglas que
la
base de datos está imponiendo.
17. Mejora en forma: parte 1: Muy bien chicos, estamos
avanzando muy bien. Cuando estuvimos el año pasado, configuramos la nueva cinta
antes de mix también
establecerá la
asociación de claves foráneas para micrófonos en autos. Conocer las reglas que
seguimos podrían
haberse extendido para cualquier número de llaves
extranjeras porque algunas personas habrían
extendido el kit de antídoto. No van a modelos
de acero porque no
pueden arriesgarse a que la gente escriba la palabra Sony para el
mismo Nissan, nissan Sony. Y una persona pone en una, la otra persona
pone en dos extremos. Posteriormente veremos ese tipo de tablero de
escenarios
en este momento
queríamos enfocarnos en nuestra interfaz de usuario actualizarnuestra interfaz de usuariocon nuestra introducción de nuestros nuevos campos en
las formas de marcas y modelos o Manso ID y modelo. Lo primero o bien, no
quiero decir lo
primero como si
necesitáramos necesariamente
seguir este orden. Pero una cosa que definitivamente
vamos a necesitar serían las
páginas de multitud para la media. Porque podemos escribir no, los autos tienen
dependencia de Manso ID. No puedo muy bien poner una lista
desplegable para el micrófono en lugar de los autos
a menos que exista mezcla. Voy a tener que crear algunas páginas para que
podamos gestionar la mezcla. Sólo voy a seguir adelante
y golpear agregar una nueva carpeta. Y voy a llamar a esta mezcla. Entonces pasado de lo que en realidad fuimos uno por uno creando
todas las páginas de código. Hicimos la página Crear, así que
hicimos la página de edición, etcétera Para mí, fui a hacer una operación
más al por mayor. Por lo que sólo vamos a
hacer clic derecho en esta carpeta, haga clic en Agregar serie de página, y luego usaremos la
opción Razor páginas usando Entity
Framework y crudo. Muy bien, haz clic en Agregar. Entonces va a
decir, está bien, ¿cuál es la clase modal esta vez que
estamos lidiando con el mic, ese es el
contexto de datos y haga clic en Agregar. Ahora si echas un
vistazo a lo que hay en la carpeta, verás que todas
las páginas que vimos meticulosamente agregadas una por una cuando estamos
lidiando con autos, están todas generadas para nosotros. Tenemos la puja de índice, que es la lista de mix. Tenemos la página de edición, que es el formulario
para editar la mezcla, tenemos los detalles. Todos ellos
se generaron en un solo barrido. Te llevé a través de ellos
uno por uno para que pudieras
mirar el código. Ahora que tenemos una mejor
comprensión de lo que cada página está haciendo bajo código
que se genera está haciendo. Podríamos simplemente hacer las operaciones
al por mayor. Puedes hacer eso
por tus clases, pero no te adelantes demasiado y empieces a hacerlo por
todo lo demás justo todavía, porque hay
más cosas que
debemos considerar en el diseño, pero no, está bien. Ahora tenemos la capacidad de hacer o ingresar datos en
la tabla mixta. Y luego una vez introducimos datos en esa tabla de mezclas y
construimos esa lista en la base de datos. Tenemos que poder presentarlos
a
los usuarios cuando están
entrando autos. Una cosa que voy a hacer
es agregar este elemento de menú o un elemento desconocido
al pitch de diseño para que
podamos navegar hasta él. Y luego solo
controlaré F5 y simplemente hago una prueba rápida solo para asegurarme de que el código esté funcionando para mí. Saltando al enlace, podemos hacer click en Crear Nuevo. Y luego el
primero es Toyota crear. Y vemos creado. Entonces no escribimos
ningún código, solo saberlo. Todo lo que hicimos fue simplemente seguir un simple paso de
andamios o todas las páginas. Y ahora tenemos todas estas
ediciones. Tenemos los detalles. Como ves, regresó con los botones
y enlaces estándar y así sucesivamente. Así que siempre pensé la uniformidad de la
burbuja. Queríamos asegurarnos de que
nuestros botones se vean así para todas nuestras apps para que puedas seguir
adelante y darles estilo. Ejercitar músculos
de arranque flexibles no. Y empieza a ver bien. Quiero que todo se
vea de la misma manera. No hay problema. Por ahora sin embargo. Sólo queremos enfocarnos
en la funcionalidad. Así que estamos consiguiendo,
déjame ponerme uno más. En este punto, tal vez
un administrador
sería el que gestione
esta lista mixta. Eso está bien. Ahora cuando miramos
el crear para auto, recuerda que teníamos que entrar
hasta el campo que se
pegará en el nombre. Pero no, necesitamos tener un campo para modelo y necesitamos tener un campo que sea una
lista desplegable con la lista de mix. Lo que tenemos que hacer es saltar a nuestros autos crea página y voy a descomentar esta
sección para el nombre del punto del coche. Ningún disco se puede tallar
modelos, modelo de punto de coche. Esa es nuestra nueva aportación
para esa sección. Pero también voy a presentar, sólo
estoy copiando el grupo de formularios. Una vez más, la uniformidad. Eso es lo que se generó En
cada vez que queremos controles. Sólo voy a guardarlo
en ese tipo de formato. Incluso si lo estoy escribiendo manualmente, a veces es posible que
tenga que hacer eso. Es bueno simplemente seguir esa convención de codificación porque eso es para esa
capa que quieres. Para el modelo Kardon
o para el siguiente, diría Car dot mq ID. Ahora para el id de micrófono, queremos una lista desplegable. No queremos una toma la caja. Así que recuerda que es informa
que tenemos etiqueta llamada select. Esta etiqueta nos permite
poner en opciones. La primera opción que voy
a decir es select mic. Muy bien, así que ese
es el primer aviso. Pero obviamente,
no voy a
sentarme a escribir en todas
las demás opciones, Nissan y Toyota. Porque si lo hago manualmente, eso niega el hecho de
que queremos tener esa lista dinámica de la tabla
mixta en el select, voy a decir ASP dash four. Por lo que estos son ayudantes de etiqueta
donde puedo ver quiero que esta lista desplegable
sea para auto make ID. Entonces lo siguiente
sería decir, ¿de dónde estoy sacando
los artículos? Mis artículos tienen que
venir de algunas listas. Entonces voy a verme mezclar. Sólo estoy poniendo eso ahí fuera. Ese no es el nombre
de la lista todavía, eso aún no existe. De ahí que la línea roja. En el código detrás necesito enviar o preparar al
menos llamado mix, que comprenderá la lista
de mí x de la base de datos. Así que al repasar,
voy a querer crea nuestros derechos de propiedad
en el punto uno. O en realidad prefiero tener mis propiedades por encima de mis métodos. Sólo estoy haciendo este refactorizado
rápido. Eso es porque prefiero
tenerlo de esa manera. Si no tienes ningún problema, entonces ningún problema no
necesariamente tiene que seguir, pero me gusta
verlos a todos en un solo lugar. Entonces sí, sabemos que
tenemos la propiedad del auto. Pero luego fui a decir lista de selección
pública. Entonces ese es un nuevo
tipo de datos que estamos viendo. Y estoy llamando a este una mezcla. Hacemos eso Gita y nos sentamos. Entonces después de tener la lista de
hendidura en conseguir, recuerda en consigue prepara. Más bien está ahí para que podamos preparar todos los datos
necesarios para la página. Por lo que antes de esto, no se
necesitaban datos para la página. Solo teníamos que volver
a la forma vacía. No, necesito realmente sacar
estas cosas de la base de datos, de la mesa mixta, llenarlo, o ponerlo en
esta propiedad mixta. Y creo que
basado en el nombre aquí, oh, necesito decir
modelado mix. Para haber creado mix, puedo decir modelado hace
disculpas. Esa es una mezcla model.fit. Y aquí están nuestros
apropiadamente llamados micrófonos. Necesito llenar mix con los datos
provenientes de la mesa mixta. De lo contrario, no estaríamos más cerca de lograr
nada que seamos. No. Por lo que puedo ver mix es igual a, no
quiero inicializar
una nueva selección para seleccionar lista me permite pasar
en una colección de artículos. Y luego al igual que con la etiqueta de selección o
la lista desplegable, tengo algo que se muestra y algo que
está siendo atrapado o almacenado. Es decir, cuando
estamos mostrando el micrófono, el usuario debe estar viendo Toyota, Nissan,
Lamborghini, Ferrari. No obstante, si bien necesitamos rastrear y almacenar es el ID real, por eso dijimos
que es
el ASP para el manso IID, lo que
significa lo que selecciono
de la lista desplegable, mira su valor y almacena
ese valor en el ID de marca. No obstante, estaré mostrando el nombre que está
asociado a la media. Para la lista, voy
a ver contexto. Contexto. Por favor dame todos
los micrófonos y para
enumerar esto soy yo diciendo
dame toda la mezcla
en la base de datos. Entonces solo diré Como. El perdón, sólo
voy a asegurarme. Vale, sí, a veces
me las meto. Por lo que tenemos el campo de valor de datos y tenemos el campo de texto de datos. Entonces el valor que estamos
comprobando es la media, es el ID más bien de
la tabla mixta. Y si te olvidaste,
solo ve a la mesa mixta para ver
cuáles son los nombres de campo. El valor que estamos llevando
a cabo es ID. Queremos traer de vuelta el nombre. También notas que tengo
estas propiedades adicionales, por lo que eso es en realidad opcional, pero cumple con el
mismo propósito que cuando ponemos la
propiedad mic en los autos, es
decir que un auto
va a tener uno manso. No puedes tener un auto al que
vas a llamar una mezcla diferente para tener un Nissan o te diré
cuáles son algunas cosas. Entonces es uno
por eso que en la mesa del auto, tenemos una identificación al auto
y una propiedad de navegación. No obstante, Toyota fabrica muchos autos. Entonces si estamos
viendo un Toyota récord, podría
haber muchos autos que
tengan el Toyota ID en ellos, así que por eso tenemos
una lista de auto hasta ahora, cualquier registro de micrófono que
miremos, en realidad podemos ver todos los autos que se
asocian a él están todos relacionados con ella. Mientras estamos aquí,
solo puedo silenciar esto virtual. Muy bien, volver a nuestro código
donde transportando el ID, pero queremos mostrar
el nombre al usuario. Esto solo soy yo viendo en llegar
a carga lineal en la página. Por favor, siga adelante y
ejecute esa consulta, rellene esa lista y luego
envíe de vuelta la página. Una vez que hagamos todo eso, sólo
voy a guardar y
Control F5 para previsualizar. Y aquí estamos. Sé que se ve un poco
desigual, pero podemos arreglarlo. Lo que estamos viendo, el id del micrófono. Entonces esa es nuestra etiqueta.
No tecleamos eso. Todo lo que hicimos fue darle la etiqueta y decir
déjame saltar por encima. Todo lo que hicimos fue decir una etiqueta
para cardamomo identificación única. Bueno, estamos viendo la etiqueta. Si miramos en esta lista
desplegable, estamos viendo la
opción select mic. También estamos viendo otras cosas que no agregamos como opciones. Por lo que ves que se va a la base de datos y consiguiendo
Toyota y Nissan. Una vez más,
lo bueno de esto es una vez que se actualiza esta lista, por lo que si digo Ferrari y creo, una vez que refresque la página, se actualizará esa
lista y aparece. Muy bien, ese es el poder
de esta lista desplegable. Cuando queremos restringir
lo que el usuario puede ingresar, solo les damos una lista desplegable y
mantenemos esa tabla. De lo contrario, tienen
muy poco control sobre lo que pueden poner
por ese valor. Quiero decir, estilismo sabio, lo que nos falta es o control de formulario de
clase en la clase selecto
equivale al control de formulario. Simplemente guardaré eso y refrescaré
y permitiré que se compile. Y eso se ve un
poco mejor. Y entonces también podemos ver cómo podemos cambiar
todas las etiquetas. Pero intentemos crear un auto. En primer lugar, si digo select mic, no pongo en nuestro modelo,
no pongo el oído interno. Entonces recuerda, aquí
se requiere un modelo. Si traté de crear, solo me dirá, Hey, no
puedes ir más lejos
hasta que se haga algo. Me está diciendo el mensaje
equivocado de validación aquí. Y eso es porque no
me actualizé. Esta validación fue muy lejana. Ese es uno de los peligros
de copiar y pegar. Sólo asegúrate de
cubrir todas las bases. Pero oye, por eso
estamos aquí para probar. Si pongo en Toyota, pongo en el modelo Sea Harrier. El año es 2001. Si todo parece
válido y creo, entonces vemos nuestra lista
volviendo con tres. Añadimos dos antes
y supervisamos tres. No, en la lista, no se muestra nada. Y no se
muestra nada en esa lista. Ahora vamos
a saltar a la lista y ver. Entonces habíamos comentado
el nombre y el año. Lo que voy a hacer es simplemente
descomentar todo esto en comentario, todo. El nombre va a
dar un error porque ya no
hay
nombre no es modelo. Y mira este nulo cuando
quiero ver qué tipo
de tarjeta del año. Entonces es un Toyota Harrier 2001.
¿ Qué tengo, verdad? No. Sólo tengo el
año que es 2001, mic en Meek ID, que es el campo
en la base de datos. Pero obviamente no puedo estar
mostrando que los usuarios hacen TI. Así que solo voy a mostrar lo que
verían los usuarios si dijera Manso ID, porque los valores de ID son
realmente para uso interno, realmente no
son para
una visibilidad de usuario. Cuando refresco y
veo esto, no, los dos primeros no tienen ID de
micrófono y eso está bien. Entendemos por qué
porque existían antes de que lo
estalláramos en el micrófono. No obstante, sólo estoy viendo
uno. ¿Qué es uno? ¿ Qué es uno más alto? Eso no significa nada para el usuario. Por lo que ya establecimos que las claves
primarias son
útiles para navegar. Entonces en todo qué registro estamos mirando y a qué
registro estamos apuntando. En esta situación,
esto se muestra, esto no significa nada para el usuario. Por eso tenemos la propiedad de navegación
que estaba describiendo. Cuando creamos auto, nos aseguramos de poner en esa
propiedad de navegación porque no, puedo ver dame el mic que está asociado a
este auto y
puedo obtener los detalles de ese
mic en la forma de su nombre. Para que pueda saber apenas cumplir ese cambio
rápido en mi punto de vista. Y probablemente lo voy a
ejecutar a otro error, pero déjame cumplir con ese cambio, refrescar y eso está en blanco. Muy bien, veamos
por qué eso es negro. Está en blanco porque al
preparar los datos, estoy diciendo que
me den todos los autos. Necesito decirle a la consulta que
cuando me consigas los autos, también
quiero incluir
los detalles fuera del micrófono. Conseguir los autos, sí. Y consiguió la identificación mansa, pero no consiguió los
detalles de la media. Sólo te estoy mostrando cómo
todo está interconectado. Entonces por eso
sigo mostrándote lo que no funciona en cómo lo arreglamos. Entonces para obtener los
detalles del mic, tengo que ver autos dot incluir. Entonces le voy a dar una expresión lambda
donde
pasaron por lo que parecían las expresiones lambda. Estoy viendo incluir manso. Entonces en cualquier momento tienes una clave foránea en una mesa y tienes esa
propiedad de navegación y
quieres ejecutar una consulta donde
llegues a todos los detalles de
la tabla de claves foráneas también como la mesa principal. Eso es
todo lo que tienes que hacer. Base de datos Consígueme los autos, incluya los detalles para los mansos
relacionados y luego dame todo como al menos
después de hacer ese cambio. Si vuelvo a refrescar, entonces vemos toyota. Ya ves cómo todo
acaba de juntarse en este. Una vez más, permítanme solo revisar. Incluí los detalles
del mic en la consulta. En autos se acercó. Fue fácil para mí ver, dame el auto,
tráeme el manso, y consígueme el nombre. Ahora en caso de que no te
expliqué antes lo que estas áreas subscripts están
aquí arriba frente a
que no se hagan aquí, solo
queremos el nombre para mostrar. Por lo que en realidad podría simplemente
quitar esto y poner en su propio
nombre para mostrar si lo desea, eso estaría bien. Nombre aquí, el nombre
realmente no significa nada. Ok. Sí, habíamos nombrado
inicialmente pero teníamos nombre Voy a rutear o el de
Suzuki en deporte. Ningún nombre sólo
va a estar almacenando Toyota porque el modelo está
ahí para ver un más alto. Entonces esto realmente debería decir
algo más como yo. Si quieres cambiar
lo que se está mostrando, puedes quitar fácilmente ese
código y ponerlo en tu cuenta. Ya miramos las mesas. Sabemos lo que podemos poner en nuestro propio texto para
el encabezado de la tabla. Con ese simple cambio, cuando regeneramos la
tabla o la página, vemos no imprimiendo manso. Muy bien, entonces ya ves cómo se está uniendo
todo. Entonces la cosa es, básicamente
tenemos
que repetir ese feed para cualquier lugar que esté tirando de datos y
se espera que muestre algo. Entonces sí, lo tenemos en la lista, pero vamos a pasar por esto se
llama prueba de regresión. Ahora, en cualquier momento que hagas un
cambio en tu sistema, siempre quisiste
asegurarse de que lo que haya obtenido y trabajado acería. Vemos que tenemos funcionando
la lista. Vemos que tenemos que
crear trabajo. Si miro edición y detalles, voy a ver que, vale, Update aún necesita
algún trabajo al respecto. Y los detalles necesitan
algún trabajo al respecto. Así que vamos a cambiar los viejos. Así que empecemos con las
actualizaciones porque ya
sabemos que la actualización se
parece al Create. Solo necesito tomar los mismos campos que
tengo en el creado para la lista de selección y
el modelo y ponerlo
encima en la actualización, poco sobre ella que
comentó código y pega. Pero no es sólo eso. Todavía tenemos que cargar
esta lista desplegable porque las semillas que la completan
no sabe qué es la mezcla. Al igual que lo que hicimos
con el crear donde
teníamos esa propiedad llamada mic. Alguien se va a dar esa
propiedad llamada mix otra vez. Entonces voy a tener
que llenar eso hace propiedad con datos. Así que al igual que lo que
hicimos eso es en el on llegar aquí para la actualización. Voy a tener que
contarlo en conseguir sí, aquí se mete en el
récord del auto para ser abatido. Pero entonces sólo voy a
seguir adelante y poner en esa mezcla. Entonces si obtienes el registro del auto y no
está devolviendo la dinámica telefónica
NADH, la siguiente base de datos
llamó para obtener la mezcla, entonces podemos devolver
la página después de hacer esos cambios a
la página de actualización. Si refresco, entonces
voy a ver que
tenemos esto sucediendo. Observe que es
por defecto seleccionar mic. Si vuelvo a List y
elijo uno que tenga un mic, automáticamente se
atarán y me mostrarán la leche que se
seleccionó previamente. Es vinculante. Es, es un poco inteligente. Pero debido a que los otros
no me tenían, se consigue no mostrarme
nada, disculpe, el predeterminado una vez que un valor se reúna una
vez
a la semana idea te presentaba al bind automáticamente en
la edición para los detalles. Bueno, antes de llegar
a los detalles, asegurémonos de que
esto aún funcione. Fui a ver esto es una herramienta de 2 mil
igual de simple cambio, guardar, y vemos que
se está reflejando, por lo que el editor sigue trabajando. Eso es bueno. Necesitamos actualizar los
detalles saber para hacerle saber lo que se espera de ella pueda descomentar que el
enfermo SHA-1 fue en primer lugar, lo
duplicé, luego
puedo descomentar. Esto no es nombre, ya
no nombre solo sino
nombre de punto y esto no es modelo. Ningún detalle mostrará el oído, el nombre del micrófono fuera del
micrófono y el modelo. Para nuestra consulta. Tenemos que avisarle
cuando primero consigas autos. Tercer defecto. Una vez más, por favor incluya los
detalles del micrófono. Entonces incluimos la expresión lambda
y el mic en get, obtenemos el auto con los detalles. Y entonces podemos ver todo. Si veo los detalles
del Toyota superior nom, ver todo volviendo. Una vez más, vemos ese
nombre justo ahí mismo en su lugar. El asunto es que no,
fui a fui a una especie de retener en cambiar la propiedad aquí
porque lo hicimos por el índice donde lo
cambio manualmente. Pero entonces podríamos querer
hacer por los detalles, pero entonces si lo cambiamos dinero, alguna vez fueron
y entonces el cliente o quien sea que estemos construyendo el software para una viene y dice, yo don no como esa etiqueta,
cambia esa etiqueta, entonces eso es tantos lugares como vamos
a tener que cumplir con el cambio. La forma más rápida de cumplir con ese tipo de modificación será
utilizar anotaciones. Aquí puedo ver la
clase MEC que su pantalla. Display. Después de incluir bibliotecas
faltantes
controlar datos e ingresar. Entonces el nombre es el parámetro. Entonces tu nombre para mostrar es solo cambiando que aquí están sentados que
aquí arriba de esa propiedad. En cualquier lugar ese nombre
para mostrar para ello es ya está actualizado. En cualquier lugar ese
nombre para mostrar para beta de código está siendo utilizado como si estuviera
siendo utilizado en el índice. Antes de cambiarlo
a nombre
para mostrar semilla para eso automáticamente
va a buscar cualquier anotación de datos
por encima de esa propiedad que vea mostrar y
luego usar ese texto. Eso en realidad me
arrojaría el dolor de necesitar cambiar ese
dinero mientras ellos en todas partes, puedo volver a mostrar
nombre para el índice. Puedo guardarlo en los detalles
porque ahí está nombre para mostrar. Entonces en todas partes a las que se
está haciendo referencia, utilizará automáticamente ese gusto. Muy bien. Sólo te estoy mostrando
unas buenas maneras más limpias en lugar de volver a escribir en seco. No te repitas. Ese es uno de los principios
fundamentales del desarrollo sólido. Así que lo menos posible
debería estar reescribiendo código siempre buscar una solución que tenga un alcance más global, a diferencia de una
que requiere que
sigas haciendo
lo mismo una y otra vez. Ahora, intentemos crear
algo más modelo. Vamos a llamarlo Tesla,
año 2221 crear. Muy bien, por lo que ves que
esto no es válido para mí ID. Entonces este es uno de
esos errores predeterminados porque no le pusimos ningún mensaje de
error,
pero solo
nos está volviendo a búfer y viendo que no
es válido para
Manso ID, por lo que la validación es casi
automática en ese punto. De la misma manera, si tengo una fecha inválida, año que no sea que veas el oído de campo debe estar
entre ese mensaje. Ese mensaje se
acerca porque ponemos en el rango
para el detalle. Estas son formas en las que puede
mejorar la interfaz de usuario y hacer cumplir ciertas reglas para
que sus usuarios preserven su integridad de datos.
18. Mejora en forma: parte 2: Muy bien chicos. Lo que queremos hacer es seguir construyendo sobre cómo
mejoramos los foros y las dos cosas que tenemos que
hacer para asegurarnos de que brindemos la mejor
experiencia a nuestros usuarios. Saber cuando se trata de
los pasos de validación, vistas notarían que nuestro es válido no se
golpea cuando tratamos de
enviar los datos no válidos. Y eso es realmente porque
tenemos aquí los
scripts de validación, asegurándonos de que solo los datos válidos vayan
más allá de lo
dicho el cliente y eso es bueno. Pero entonces en
caso de que existan ciertas circunstancias en las que pueda pensar que es
válido por este lado, pero luego necesitamos validación
en el lado del servidor. Entonces esta es la
validación del lado del cliente. Me has oído hablar
del conjunto de los clientes. Creo que la validación del lado del cliente ocurre en el front-end, ¿verdad? Entonces entre JavaScript y HTML, estamos haciendo saber a los usuarios
qué es válido, qué no. Si uso un desactiva JavaScript, pueden eludir fácilmente
ese mecanismo. Además, podría haber momentos ciertas reglas de validación tengan que ser evaluadas en
el lado del servidor. Entonces si tienes una lógica compleja, como tal vez tengas otra
validación para asegurarte que el modelo coincida con el micrófono del coche o
algo así. Sea lo que sea, es complejo. Realmente no puede ser retrato en nuestra ESR ni se requiere, o es entre estos valores. En realidad no es un booleano o
algo que sea rápido. Y entonces tendríamos que construir algunas reglas de
validación más complejas en el lado del servidor o en el código para asegurarnos de
que sea válida. Lo que quiero retratar en
este momento es lo que sucede cuando tal vez es que la
validación del lado del cliente no se está ejecutando. Para hacer un
experimento rápido con eso, solo
voy a comentar los
scripts de validación parciales. Entonces una forma rápida de comentar, pon el cursor en
el control de línea. Casey comentará y la clave de control que
descomentar. Apretando Control. Pulsas la tecla, luego presionas C, y luego entrará. Y luego haces lo
mismo con clave y tú, y se descomenta. Estoy deshabilitando este script que se está ejecutando en
el lado del cliente. Y voy a poner aquí el
punto de ruptura para que podamos ver qué pasa cuando
se invita algo en el foro. Sólo voy a hacer clic en
Crear y mirar lo que pasa. Se salta justo al puesto. Entonces no hay mensaje
de validación. Recuerda la última vez
que siempre solo
imprimiríamos todo el
mensaje de validación fuera del botón. No, no se está llevando a cabo ninguna
validación del lado del cliente. Entonces nuestro a prueba de fallas es
este estado modelo, el estado
modelo DOT es válido, es válido, la retina es falsa. Si miramos en los estados modelo, sólo para que podamos entender
exactamente lo que está pasando aquí. Lucy,
estado de validación en válido, cuántos hay, entonces tienes las
claves y resultados. Entonces vamos a los resultados. Los resultados nos mostrarían las claves y los
conjuntos de validación de cada clave. Entonces la clave aquí sería
cada valor que está en el modelo que se está validando
o módulo de coche. Y la validación diría
que se requiere el año, se requiere
modelo, hacer ID aunque todos esos
son requeridos. No. Ninguno de ellos fue proporcionado. Todos ellos son inválidos. Y luego si quieres perforar hacia abajo en ella, ves la clave, ves el valor,
y luego te dará
algunos otros detalles. Intento de valor fue que
hay muchas cosas que no
puedes sacar de
este modelo estados. Entonces aquí está ese error exacto. Está diciendo que se invita al valor que es una cadena vacía. Ese es el erudito que
vas a llegar ahí, presiona F5 ilimitado, continúa. Esto es lo que impide el viejo. Entonces estamos obteniendo ese resumen de
validación y estamos recibiendo cada error
debajo de cada campo. Entonces si pongo en algo que
está fuera del reingreso, sí dije que el rango
es de 1999 a 2020. Entonces si pongo 1990 e intento de nuevo, entonces sigue siendo inválido. Presiono de nuevo a F5. No, nos va a mostrar
un oh diferente, lo siento. Debí haber dicho 1900. Eso habría sido invitado. Déjame intentarlo de nuevo. Entonces crea calor, el punto de ruptura, continuar, y ahí vamos. Por lo que el oído de campo debe
ser entre 19902021. Entonces estamos viendo
toda la validación donde estamos familiarizados
con este Randolph. Eso es qué? validación del lado del servidor
restablece la tabla si alguien inhabilita su
JavaScript en su navegador, o por cualquier
motivo el área con un bypass el JavaScript porque todo con
HTML y y CSS está disponible
para sus usuarios. Entonces esto se trata de nodo de codificación
segura porque todo lo que tengo
que hacer es inspeccionar elemento. Puedo ver todo
por encima del código. Podría modificar esto
ciertas cosas. Podría optar por desactivar este script en esta
página, cosas así. Eso es agujero, el agujero importante o paso de validación del
lado del servidor es asegurar que no lo
hagamos, no devolvemos ninguna
basura a nuestro sistema. Ahora otro gran tema
que son un gran tema que definitivamente
tenemos que abordar es el hecho de que solo
iba a empezar de nuevo. Vamos a crear nuevo. Tenemos nuestra lista de los
mics no son divertidos. Fui a decir modelo Toyota, modelo
de auto, lo que sea. Hago click en Crear, invierno, elimino este punto bruto porque sabemos que va a ser inválido porque no
había modelo, ni valor para el año proporcionado. Pero, ¿qué pasó con los mansos? Mira eso, esa
lista ha desaparecido. Lo que sucede es que
cuando estamos tratando con lista de
selección y ciertos
tipos de listas en el post, siempre hay que asegurarse de que si vas a
terminar devolviendo la página, es necesario volver
la página con todos esos datos
adicionales. Porque en este momento el
único dato que es bueno para persistir es cualquier cosa que tenga
la propiedad bind por encima de ella. Incluso si veo la propiedad de Ben
por encima de la lista de selecciones aquí, la realidad es que no
hay campos en mi formulario para almacenar toda la lista. Tengo un campo para almacenar el ID que fue seleccionado de la lista, pero no toda la lista. Esta lista tiene que actualizarse
cada vez que se carga esta página. Sólo para decir que
no podemos ir a
conseguir la lista de la
base de datos y por periodo. Por lo que podría cargarse cuando
soy inválido o el pH, el envío es
un en estado inválido y el
pH tiene que ser devuelto. El pH va a tener que ser
devuelto sin mezcla en él. Entonces fui a dar un ejemplo
de lo que quiero decir aquí. Sólo voy a poner algún código aquí que sólo
va a decir var mix. Después de enviar es igual a mezclar. Vamos a ver lo que
hay en mix antes de Enviar. Y luego vamos a
ver lo que pasa a mezclar después de una presentación. Entonces con las últimas versiones de Visual Studio anteriores
en modo de debug, realidad
puedes simplemente
hacer clic, Aplicar cambios de código. Entonces vuelve a tu código. Simplemente refrescaré la página. Muy bien, vamos
a pasar por esto otra vez. Voy a intentar
crear y voy a mandar algo
que no es válido. Voy a volver a poner mis
puntos de ruptura para que se
detenga para que podamos ver qué
valor viene aquí. También voy a
poner un punto de descanso aquí antes de que devuelva un melocotón. Así que cuando vea, está bien, déjame refrescar. Permítanme volver a hacer esto, lo siento. Así que crea mediodía. Entonces cuando sí creo nuevo, golpea este punto de ruptura
para la página. Entonces si miro en mix, estoy viendo que mix
es que tiene datos. Todavía tiene eso
sugiere que tiene datos. Tiene los ítems que
entrarán en la lista
desplegable. Muy bien, eso se ve bien. Sólo voy a
quitar ese punto de ruptura. Envía algo
que no sea válido. Cuando el punto de ruptura fue que la declaración if, no
lo golpeó. Así que sólo
lo estoy moviendo hasta la línea 34 para mí o los primeros
escritos del método. Voy a entrar en esto
y luego vamos a buscar mix,
mix es nulo solo para conducir mi herramienta de punto y que una vez que se envíen
los datos, tu selecciona esto y básicamente cualquier cosa que
sea al menos que no sea ser deshuesado o que no se puede
deshuesar va a estar vacío. Una vez que envíes. Lo que tenemos que hacer es
actualizar esa lista. Sólo voy a parar. Y vamos a hacer ese
bit de código para asegurarnos de que la página siempre esté
provista de su lista de selección. O en un caso en el que
tengas múltiples desplegables, este es el mismo concepto. Esto asegura que todos
ellos estén poblados con los datos cuando el
pH se carga en absoluto. Así que en realidad podría simplemente tomar este bit de código
y colocarlo aquí. Si el estado del modelo no es válido, vuelva a cargar la lista de mezcla
y luego volver a la página. De lo contrario, basta con seguir adelante para que no desperdicie la llamada a la base de datos. Si el estado modelo es válido, entonces no hará nada de eso. Simplemente saltó
a esto y procederá. Saber lo que no me gusta hacer
es repetir código como este. ¿ Por qué parece simple
y simplemente basta es un archivo de clase
pequeño y en
realidad es solo una línea. Pero entonces, ¿qué cambia
algo? Recuerda, dije
que cuanto más repitas en medio de código
alrededor de la aplicación, más difícil
será tu mantenimiento cuando algo cambie. Lo que tiendo a hacer es
tener un método privado. Así que voy a decir tarea privada. Sólo diremos tarea privada. Y lo haré una tarea asíncrona. Aquí. Llámala poblar, listas
desplegables. Es uno que simplemente lo llamaría
poblar listas desplegables. Y luego dentro de eso, hago esa llamada al método. Entonces esto sabría b. Y puedo conocer a este asíncrono
asociados al menos un fregadero que me necesita
para incluir esa biblioteca. Y entonces puedo cumplir con este trigo. Muy bien, entonces es
un método asíncrono. Quería hacer uso de
los métodos asíncronos. Lo que sí sé es simplemente llamar a este método en todas partes que
necesito hacer esa población. Si tengo múltiples listas
desplegables, necesito poblar. Acabo de hacer solo los
pongo aquí una vez que lo llamo a eso. Y entonces puede hacer
eso porque
hay otras
situaciones en las que podría necesitar datos que no
están siendo atrapados en la página. posible que sea necesario que esté presente en el pH si se invita al
estado del modelo. Para que puedas, por qué estoy llamando
populate desplegable esto, también
podrías llamarlo
como Señor, datos iniciales. Entonces cualquier consulta, cualquier
operación que necesites
realizar antes de
que la
página sea visible, pones todo ese código
aquí para que no
tengamos que repetirlo
en tus manejadores. Si tienes más de 100, solo 100 realmente no importa. No tienes que repetirlo. No, tengo que esperarlo cuando esté haciendo la llamada porque
es asíncrona. Pero luego arriba arriba, éste me está dando una flecha, y eso
me está dando un error porque este método no es asíncrono. Entonces vamos a convertir
este a asíncrono. Tarea asíncrona. Y se espera que esta tarea devuelva algo del
tipo i resultado de acción. Y una vez que he
hecho todo eso, todas las líneas rojas brillantes
y todos están felices. Sólo te estoy mostrando
unas pequeñas trampas o cosas que
tener cuando estás escribiendo
tus aplicaciones.
19. Mejora los formas y validaciones, parte 1: Muy bien, entonces estamos
construyendo esta aplicación y mostramos a nuestros grupos de interés porque al final del día, la mayor parte de lo que
vas a estar construyendo, vas a tener que hacer una demostración
a alguien. Mientras lo pruebas, mientras lo desarrollas,
lo pruebas. Um, o estás guiado
por sus expectativas en forma de requisitos de
software, o te estás guiando por
lo que crees que necesitan, cual puede ser peligroso. Porque en esta situación sin ningún
requisito formal dado, nos
han dado alguna retroalimentación y nos han dicho que definitivamente habrá
que cambiar
ciertas cosas. No, número uno, están diciendo que necesitan
más información sobre los autos para ser almacenados. Conoce el año, el
micrófono, el modelo. Eso no es suficiente información. Necesitan que digamos de
qué color
es el auto y que proporcionemos un número dividido de
licencia, que creo que son puntos de
sellador. Otro tema que
han señalado es que pueden
ocurrir errores ortográficos porque dejamos el modelo
como campo de texto libre. Si bien la música es una
lista desplegable, el modelo no lo es. Y discutimos el
peligro de eso antes. Entonces por el mismo
resultado que hicimos, hacer una lista desplegable. Vamos a tener que hacer lista desplegable de
modelador. Eso viene con sus propios
retos también porque modelo, no
podemos poner un modelo al azar. Entonces por ejemplo, un Nissan, nissan, Sony con ojo. Esos son errores ortográficos. No obstante, nada impide a alguien escribir
en Ferrari Sunni. Y si sabes
algo de Ferrari, sabes que no
tienen un modelo llamado sunita. Por lo que también dijeron que
al seleccionar un micrófono, querían asegurarse de que el modelo que son capaces seleccionar después realmente
se aplica a ese Manso. Esos son algunos requisitos
que han llegado a nuestro camino. Ya hemos hecho cosas que rodean algunos de
estos cambios. Y veamos exactamente
cómo funcionará esto. Entonces el primer cambio
que voy a hacer es
a la entidad automovilística. Recuerda que
habíamos introducido mic, necesitamos introducir más
campos y no lo estamos, ya
estamos familiarizados
con lo que tenemos que
hacer para introducir nuevos campos. El primer campo, solo estoy usando Control D para
duplicar así que no
tengo que teclear
todo desde cero. El primer campo sería cadena. Esto sería de color. El color también es otro tema
sensible. Porque alguien puede escribir azul, alguien puede escribir B0, alguien contrarrestar el
negro y olvidar la c. Así que ese es otro tema
sensible. ¿ Queremos dejar el color del
vehículo como texto libre? ¿ O queremos encerrarlo
y tenerlo en la lista? Se trata de decisiones que
tenemos que tomar para asegurar que nuestro sistema sea debido
derecho por parte de los usuarios. Personalmente. Prefiero tener
colores en una lista porque entonces las posibilidades de que los usuarios ingresen colores incorrectos
son colores que
ni siquiera existen se disminuye
en gran medida. Del mismo modo que
tenemos el identificador de llamadas. Esto va a
ser una clave foránea. Entonces déjame, déjame retroceder
un poco y voy a introducir los nuevos
campos en el orden. Muy bien, así que debajo de mí, fui a salvar a public int
y no estoy haciendo ningún nivel. Entonces recuerda por qué tuvimos que
poner esto a disposición. Estamos introduciendo una
clave foránea después del hecho, después de que haya
registros ahí ya. Por lo que queríamos
asegurarnos de que tengamos muy pocos conflictos con
los valores clave extranjeros. Vamos a tener
otra propiedad, que va a ser
una propiedad virtual y fue a llamarla color. Se va a llamar
color en sí, tipo color. Se va a llamar
color, sin color. Mira esto. Sólo puedo hacer puntos de control. No tenemos una
clase llamada color. Para que pueda ver generar
un tipo llamado color. Y les preguntará,
¿quieres que necesite en un nuevo expediente? Fui a verlo, sí, porque quería
denotar nuevo para nosotros. Ahí ha aparecido como
color y ese error se ha ido. Así que esa es una forma
rápida agradable cuando estás creando nuevos tipos y no los
has creado vtable, estás enjuagando o
lo que necesitas hacer. Visual Studio tiene
sugerencias para ayudarte a ser más productivo y no
enfocarte en las cosas pequeñas. Eso es color. ¿ Qué necesito? Necesitamos la lista para modelo. Modelo va a sufrir el mismo destino que sufrió el
nombre. Algunos solo van a
quitar el campo modelo. Esto va a ser una identificación modelo. Te darás cuenta que siempre
vuelvo y corrijo. Deja fuera algo que no está capitalizado o cómo un error
ortográfico
siempre estoy jardinería
porque cuando lo haces bien la primera vez
que sube firewall. Así que una vez más, con modelo, no
estoy vinculado a
usar ninguna biblioteca. En realidad quería
generar mi propia confianza. Y luego modelo, como ves, es en realidad como una palabra clave
porque es modelo. Me
habrías escuchado hablar de modelos cuando estábamos hablando de
Entity Framework en etcétera. Entonces es un poco arriesgado si solo
llamo al
modelo de clase porque no
sé con qué otro nombre o con
qué otro tipo de datos
podría estar en conflicto. Voy a
llamarlo modelo de auto, sólo para estar en el lado seguro. El tipo de datos que estoy creando
se llama modelo de coche. Pero entonces voy a llamar
al campo dentro de mi
auto de clase, solo modelo. ¿ Está bien? Una vez más, a veces
lo nombra de manera diferente. A veces lo nombras de la misma manera si
necesitabas verlo, sabemos problemas, así que vamos
a nombrarlo de la misma manera. Se trata de modelo de automóvil, ID, modelo de automóvil, y
el modelo de carro de campo. Para nuestras nuevas entidades,
¿qué necesitamos? Todos ellos necesitan
igual que lo que puede cortar. Todos necesitan una identificación. Necesitarán un nombre, y todos tendrán
esa lista de cartas. Entonces en realidad, estos campos se pueden replicar fácilmente
a través de todos ellos. Entonces para el color,
tenemos ID foto color. El display aquí
sería de color y no manso. Entonces ya ves, estoy copiando y pegando no hizo nada
malo con copiar NPC1L1 para entender el concepto o lo que estás
tratando de lograr, siempre
puedes copiar y pegar y acelerar
su productividad. Muy bien, entonces tenemos esos
tres campos en color. Y luego fui a
hacer lo mismo en nuestra clase de modelos de autos usando punto de
control para incluir
cualquier referencia que falte. Entonces éste estaría aquí
en el nombre de la disciplina. Puedo ver un modelo porque sabemos que estamos
mirando el auto, así que no necesito decirle modelo de
auto al usuario. Esto es sólo porque
estoy tratando de
evitar conflictos y esto es acecho
más experimentado porque he encontrado eso antes. Así que no te sientas de ninguna manera
si te estás preguntando, de
acuerdo, ¿cómo sé cuándo puede haber
un conflicto o no? A veces es de prueba y error. A veces lo haces
cuando intentas correr, te encuentras con el problema
para que lo cambies. No hay problema. Contamos con
auto modelo color, tenemos auto y
tenemos Manso. No. Otra cosa que voy
a señalar en este punto es el hecho de que todos
están usando campos similares
en cada uno de
estos modelos de entidad hasta ahora
tiene el campo llamado ID. Déjame simplemente espaciarlos tanto
como estos
tres tienen los tres fusionando auto común no
tiene ninguno,
nada más en común. Pero mi punto es que
en lugar de repetir ID, ID, ID, ID, ID cada vez, una cosa que
puedes hacer para una
vez más reducir la
repetición y aumentar extensibilidad y
compartibilidad a través se introduce el código
lo que llamamos modelo base. Entonces voy a crear un nuevo
elemento que voy a llamar a base una nueva clase
u otra porque estoy llamando a este
dominio en tutti. Y entonces voy a conocer a
esta clase pública abstracta. Entonces es abstracto. Las clases abstractas básicamente
significan que están ahí, pero no se puede tener una instancia
de ellas por sí mismas. Tú seleccionas ir con auto. Podemos instigar son
iniciados u otro coche aquí
puedo simplemente llamar a auto cuando
es una clase abstracta, no se
puede simplemente llamar a esta entidad de dominio
basada en entidad en cualquier lugar. No obstante, es bueno para fines de
herencia. Entonces desde aquí fui
a decir prop int id. saber que tengo
este campo aquí. Puedo a todos los demás. Todo el que necesita
ese campo ID para simplemente heredar de
B son entidades de dominio. Cuando hago eso con modelo de auto, lo que te das cuenta es que
esta identificación se enciende. Ahora, el mensaje que me
va a decir es que esta propiedad aquí está interfiriendo
con la heredada. Entonces está viendo un conflicto, no
es un error, error. Simplemente te advierte que
si pretendía heredar el valor de
éste siempre va a tener precedencia
del heredado. Pero el punto de que yo herede que no
quiero verlo ahí. Cada vez que tengas campos, para que sean livianos más adelante
en tu carrera, podrías empezar a
hablar de auditoría, donde quieres almacenar quién
creó una fecha de 10 vatios. Fue creado. Cuando tienes ese
tipo de campos, solo pones todo eso
en la entidad de dominio base y luego te aseguras de
que cada organismo que es una clase de base de datos hereda de la entidad de dominio base que nosotros cada clase tendrá
esos campos independientemente. Este nodo reducirá
su repetición. Entonces la próxima vez
que tenga otra clase, no
tengo que
pasar tiempo poniendo el
tinnitus apropiado que heredan. Si hay cinco
propiedades que la clase IVR debe tener o cada tabla
debe tener en común. Acabo de ponerlas todas en el bajo. Todo el mundo lo hereda. Muy bien, así que
sólo voy a hacer eso por todas las entidades de mi dominio. Entonces conjunto de autos, se establece modelo CAR, se establece el
color y te hacen sentarte. Todos heredan
de la base. Entonces si quisiera, como dije, sólo extendió prop. Entonces digamos que quería
saber cuándo fue creado. Entonces prop, tiempo. Fecha de creación? No, puedo decir bien, sé cuando se creó este
modelo, este MOOC fue creado cuando este auto fue puesto en
el sistema, etcétera Estos son todos los bits importantes cuando se trata
sistemas. Con estos cambios en el lugar. Saltemos a nuestra consola de
Package Manager. Y sólo voy a
añadir una nueva migración. Por lo que voy a decir agregó
más tablas de datos de autos. Ese es mi mensaje. Me gustaría migración y cualquier
mensaje describe toda
esta actividad lo mejor
posible. Y luego déjalo seguir adelante y generar esa
migración construir campo. Sí, claro, habilidades
para interferir porque todos
mis puntos de vista que
tienen modelo no van a gritar. Historia similar a lo que
pasamos con nombre. Pero una vez más, es
mejor hacer esto mientras estamos en la etapa de
desarrollo, lugar de cuando
estás en producción. Simplemente pasamos rápidamente por todos
esos campos
sin comentar que haya tenido
una dependencia del modelo. Y voy a intentarlo de nuevo. Y esta vez
obtenemos nuestra migración. Entonces veamos a través
de la migración rápidamente. Estamos viendo que estamos
soltando la columna para un modelo donde agregar la columna para la
fecha creada y se agrega,
siendo agregada a la mezcla. Estamos agregando el ID del
modelo de auto a los autos, el identificador de llamadas y
la fecha creada, todos ellos se están
agregando a los autos. Y estaban creando
las tablas adicionales. Y luego sentar
esos índices y
las claves foráneas que no
estaban allí anteriormente. Por supuesto, la cúpula
solo está deshaciendo todo eso. Deberíamos hacer una migración de remoción? Después de todo eso, fuimos a hacer una base de datos de
actualización. Y si todo va bien, terminamos lo hecho. Ahora vamos a actualizar nuestros campos. Entonces volvamos a la Create. Crear ya no tiene modelo de coche. Ahora tenemos ID de modelo, ID de modelo, y tenemos validación
para el modelo ID o lo siento, modelo de
coche, Ese es el
nombre del campo. Es la identificación del modelo CAR. Y entonces en realidad
vamos a tener una lista selecta, solo que esto para los modelos. Entonces vamos a hacer
mic, luego seleccionar modelo. Entonces nuestros artículos ASP no
viene de mix
va a estar viniendo de un campo llamado modelos
que vamos a estar sentados en unos pocos. También necesitamos
ampliar esta lista para tener una facilidad para nuestros colores. Del mismo modo que tenemos que
poner en los modelos. Tenemos que poner en nuestro identificador de llamadas,
identificador de llamadas, seleccionar color. Entonces esto vendrá
de una lista de colores. Muy bien, genial. Entonces eso es todo para o crea. Y lo que voy
a hacer sólo para que
esto sea muy fácil una vez más, copiando y pegando
nada malo en ello. Simplemente saltaré a la
actualización y cambiaré ese pensamiento porque realmente será
la misma dinámica. Eso es todo por la
actualización para nuestro índice, podemos descomentar esto y
luego poner la identificación del modelo de coche. Por lo que será el nombre del modelo CAR. En el índice. Esto queremos mostrar el año,
el micrófono, el modelo de auto. Y digamos que queríamos
poner en la imagen, lo siento el color también, sería nombre de punto de color. Verás la importancia
de los campos de navegación. Y luego descomentamos. Entonces este es modelo de auto, nombre de
punto, color, nombre de punto. Muy bien, por lo que esto
sólo está extendiendo eso. Esta es una parte normal de cualquier proceso de
desarrollo de software. Vas a hacer algo. Vas a obtener retroalimentación, y luego vas a
tener que deshacer algunas cosas y rehacer algunas cosas, hacer cosas nuevas. Es sólo una parte normal del desarrollo
de software. Por lo que hemos actualizado nuestro índice
o actualizamos o creamos. Por lo que son sólo los detalles
ahora solo vamos a actualizar eso. Podemos hacer los demás
por los detalles. También. Saber
al hacer
esto, en realidad se me ocurrió que
había una cosa que el cliente
pide que no pusimos y ese es el número de
matrícula. Ponemos en todo menos el número de matrícula,
no en este punto. Una vez más,
tienes dos opciones. O bien puede deshacer todos
los cambios que hizo en
la base de datos y luego poner
en el campo faltante. Y luego. Rehacer la migración. No voy a
pasar por todo eso. Lo que voy a hacer en cambio es C Número de matrícula pública. Voy a usar una corriente
porque la matrícula, mientras se llama número, realidad no
es un número. A veces es alfanumérico. Puedo mi país
es alfanumérico. Y tengo una regla
general que no uso int y double o cualquier tipo de datos
numérico a
menos que fui a usar este número para
alguna forma de matemáticas. Simplemente agrego mientras se llama
número y si bien puede ser estrictamente números
en su país, no
va a ser utilizado para ningún
tipo significativo de colisiones. Número completo no almacenaría número
completo como número
en la base de datos. Lo guardaré como una fuerza
porque hay alguien pone
guiones o los
corchetes y así sucesivamente, entonces ya no es
solo un número. Si el número de matrícula
viene con letras, solo durante una cadena de prueba no
tiene consecuencia. Si se trata de todos los
números son alfanuméricos. Estoy presentando ese nuevo campo y todo lo que voy
a hacer es solo agregar otra migración diciendo que
hice el número de matrícula. Sigo escribiendo nombre. Lo siento. Pero estoy consiguiendo un campo de construcción. Eso es porque todavía
no tenemos estos. Entonces lo que voy a hacer es
comentar estos
hacia fuera en la migración se hace. Vamos rápido, intentemos eso. Migración de nuevo. Nombre del botón de la gente.
No quiero nombre. Fui a quitar la migración y fui a corregirla y ver el número de la matrícula. Y luego obtenemos la migración
donde está diciendo que
solo está agregando el problema de la ley de
columna. Podríamos ponerle validaciones. Así que a veces haces algo
y luego estás como, oh snap, olvidé ese paso. Así que volvamos
y solo lo hagamos. van a requerir números de matrícula. Y voy a sentarme una
cuerda de diez. Eso es generoso en mi libro porque no creo que nadie realmente tenga un plan de
lecciones número de estaño en mi país, son seis personajes tiempo suficiente que vas
a reservar o bajar, son hasta seis, pero
eso dice ponerlo a diez. Por lo que nadie debería poder
escribir un ensayo en ese campo. Hagamos eso otra vez.
Ahora tengo que quitar la migración y luego
agregar migración. Es bueno que
Microsoft no nos
cobra cada vez que
estuvimos en esta declaración, podemos hacerlo tantas veces
como necesitemos para asegurarnos de que lo
consigamos bien
entrando en la base de datos. Entonces ves aquí es invar, char estaño musulmanes y no
anulable. Eso está bien. Entonces puedo ver la base de
datos de actualización. Eso se hace. Muy bien, entonces ahora tenemos nuestro
número de matrícula introducido. Puedo volver a
mis antebrazos y
puedo poner esa entrada
para la división de licencia. Muy bien. Por lo que puedo descomentar esto. Gordon, entra, asegúrate de que
si se explica en Tiziano, poner en clases divide
número en la forma. Entonces haz
lo mismo para la actualización. Entonces descomenta todo esto e introduce el campo número
dividido lección. Una vez más, estoy siguiendo
el mismo formato. Entonces aunque si
necesito un nuevo campo, solo
voy a copiar esto, pegarlo, y luego cambiar
lo que necesito para cambiar. Tenga en cuenta que todo
eso se introduce. Lo que tenemos que hacer es
asegurarnos de que estamos cargando las otras listas
desplegables. Entonces en este momento tenemos mics. Necesito uno para los colores
y otro para los modelos. Justo de la misma manera que
tuvimos que cargar mix. Tenemos que cargar
colores y modelos. lo que podemos simplemente
hacer fácilmente ese por favor, sin duplicar
el esfuerzo
tanto en el GET como en el post, puedo hacerlo uno por favor y
ver una carga de datos iniciales. Aquí. Sientan los modelos para ser context
dot lista Models.swift. Todos son del mismo tipo de formato y eso es
realmente modelos de autos. Lo siento. Yo no nombré. Eso está bien. Entonces
tenemos colores de
punto contextual y tenemos nombre de ID. Notarán que estoy
recibiendo estos errores. Y si me puedes decir por qué me
estoy sacando estas flechas, entonces los saludos que Steve ha estado
prestando atención. Si no
me lo puedes decir, está bien. El motivo por el que estamos
recibiendo estos errores, déjame cambiar tan rápido. El motivo por el que estamos obteniendo estas
áreas es que el contexto no sabe nada
de modelos de automóviles o colores. Entonces estoy aquí tratando de
acceder a tablas que el contexto no sepa por qué no se
ve contextos ahora, mientras las ponemos en la base de datos y
creamos una entidades, aún necesitamos poner el DB sentarse. Necesito ver. Por favor golpeó a esta
entidad llamada
modelo de automóvil contra una mesa
llamada modelos de automóviles. Y color contra color. Ahora bien, este es un buen
punto para señalar todos estos matices porque es fácil perderse estas
pequeñas cosas. Y cometí estos errores
deliberadamente sólo un punto o peaje ser
consistente es muy importante. Recuerda que esto
representa el nombre de la tabla diciendo DB set
CAR modelo y modelos de automóviles. Si hubiera puesto esto
antes de hacer la migración que la
migración habría dicho que el nombre de la tabla son modelos de
automóviles y el
nombre de la tabla aquí es colores. Pero debido a que ya hice la
migración, mira lo que pasa. El nombre de la
tabla es modelo de automóvil, y el nombre de la
tabla es color. Así que ten mucho cuidado con eso. Cualquiera que sea el nombre de la tabla está aquí, quieres
asegurarte
de que tipo de espejo que de este lado con el nombre que le das y luego ese tipo
de parece desajuste para mí. Los autos, yo. Realmente no me gusta
cuando es así. Una vez más, no nos
cobran para ejecutar migraciones, hogar e inmigraciones orina. Eso depende realmente de ti y cuántos
archivos de migración realmente quieres. Pero una vez más, a medida
que practicas más, cometes menos errores como este y verás
que lo hacen bien la primera vez. Y luego te das cuenta de
que cuando lo necesitas para ejecutar cinco migraciones para
hacer una cosa, acabas de escribir en
más recta. Ahora que he puesto esto en modelos de
autos y colores, puedo ir a los bolsillos de la consola
Manager y ejecutar una migración. Y estoy viendo nombres de tablas
cartadas, así que esa es mi migración. Cuando obtengo ese
archivo de migración, también estoy viendo eso, solo soltando las claves foráneas, soltando las claves primarias, renombrando la tabla, luego las
está agregando de nuevo. Hace todo un
proceso paso a paso de cómo
maneja incluso cambiar el nombre de la tabla. Puede parecer simple, pero nunca
aprecié completamente lo que
pasan las bases de datos en el backend hasta que realmente
vi qué tipo de código de
migración se estaba
generando para lo que
percibí operaciones
muy simples, ¿verdad? Por lo que siempre es bueno dejar que las migraciones manejen este
tipo de cosas. Simplemente agregas la migración
cuando lo necesites. Por lo que sólo vamos a actualizar la base de datos. Y una vez hecho eso, y una vez más, si te encuentras con
flechas, acabas de entrar en el código. Probablemente en la forma, por el formulario de actualización
probablemente tendría algún código
que causará problemas. Simplemente lo comentas, haz lo que tengas que hacer, y
luego volvemos a ello. Así que de vuelta en nuestra Create ahora
ves que todo el mundo está feliz. Podemos cargar datos iniciales. No hicimos esta carga datos
iniciales en nuestra actualización, y yo sugeriría eso. Entonces solo voy a descomentar este código que estaba
causando problemas. Necesitamos modelos y necesitamos los colores por aquí y fuimos a tener
ese método privado. Todo lo que hice fue copiarlo y pegarlo. Después fui a contarlo, seguir
adelante y generar
propiedad para modelos. ¿ Entonces lo ves? Entonces
adelante y genere una propiedad, cuatro colores. Ahora si miro a la
parte superior ahí están. Utilizando Visual Studio
como herramienta de productividad. Te está ayudando a concentrarte menos en las pequeñas cosas y
simplemente hacer las cosas. Sólo que sé tener
mis listas selectas. ¿ Qué necesito
hacer? Necesito llamar a mi señor método de datos iniciales. Uno. Cuando estoy a punto de
devolver la página, llamo cargar datos iniciales. Eso es asíncrono
después de nuestro ponderado. Entonces si el
estado modelo no es válido, entonces tengo que llamarlo de nuevo datos
iniciales. Eso es todo. Muy bien. Con eso, hemos
logrado mucho. E incluso entonces
probablemente podrías abstraer esta funcionalidad integrada en un método ayudante que
hace eso por ti. No voy a conseguir eso técnico y
complicado todavía. Sólo te estoy dando las ideas, pero aún ves
que tenemos que
repetir este método aquí. Y en el crear y tal vez otras páginas donde
pueda necesitar enumerarlas. Entonces, si quieres reducir la repetición y es entonces cuando
empezó a ver, vale, ¿cómo puedo crear un archivo con el método que necesitan usar múltiples
lugares? Entonces puedo llamarlo y tener todo el código en un solo lugar con
todo eso dicho y hecho. No obstante, hemos logrado mucho haber
extendido las mesas. El cuadro de autos que tenemos
crea una nueva mesas y hemos facilitado para
nueva lista desplegable de nieve. Cuando volvamos
vamos a hacer los andamios para las nuevas mesas
porque lo hicimos con
micrófonos para que pudiéramos
mantener la lista de mix. Tenemos que hacer eso por los
colores y para los modelos. Y luego también
veremos cómo podemos controlar qué modelo
aparece cuando se selecciona un micrófono.
20. Mejora los formas y validaciones, parte 2: Hola chicos, bienvenidos de vuelta. La última vez que lo dejamos
con solo poner nuevas mesas y ponemos
en las listas desplegables, pero tenemos que poner en realidad las playas de
la multitud
alrededor de estas listas. Voy a hacer uno contigo y luego
te voy
a desafiar a pausar el video y hacer
el resto por tu cuenta. Así que hagamos los andamios
para nuestras páginas de modelos de automóviles. Y luego podemos
agregar una nueva carpeta. Así que sólo voy
a decir modelos de autos. Entonces en lugar de eso, fui a agregar una nueva página Razor, páginas de
Razor usando el crudo
Entity Framework. Y luego estamos
modelando de modelo de auto. Adelante y pulsa Agregar
y salvo cualquier error, que una vez más sería porque probablemente
solo necesitas ir y retroceder a
versiones anteriores que habrían funcionado. Puedes ver tus modelos de auto
ha sido andamios. Te animo a
golpear pausa o simplemente hacer lo mismo por
tu cuenta para los colores. Si todo salió bien, entonces deberías tener una carpeta en tu página se llama colores. Y todas las páginas crud. Lo que voy a hacer es ir
rápidamente al layout y agregar los nuevos elementos suficientes. Entonces voy a quitar la
privacidad porque realmente no
estoy usando
esa privacidad vinculada. Entonces tenemos autos, tenemos
modelos mixtos, tenemos colores. Por supuesto que acaba de cambiar el camino a la raíz del índice de barras de nombre
desplegado. En otro reto
que les daría chicos es si están interesados en extender de la misma manera que
hicimos el borrado de los autos. Entonces recuerda en la página de
índice hicimos la alerta de toda la suite
y eliminamos el formulario en el jQuery para rellenar
el formulario Delete y el manejador personalizado
para la eliminación. Yo les animaría a que sólo traten de hacer eso en los demás. Ahí es donde
entra la práctica en los modelos de automóviles. Cuando estoy mirando la
lista de modelos de autos, ¿y si quisiera eliminarlos? Bueno, podemos poner en jQuery y todo y
ponerlo en manejador personalizado. Y no necesitarías
la Página Eliminar. Te estoy animando a
probarlo por tu cuenta. Lo hicimos una vez, revisamos cómo lo hicimos y
aplicamos los conocimientos porque así es realmente cómo se
mejora como desarrollador. Pongamos a prueba adeudado o aplicación. Pasemos a modelos y estoy haciendo clic en modelos y
no pasa nada. Y eso es debido al nombre de
carpeta equivocado en el diseño. Así que mi mal Shun, refresco. Inténtalo de nuevo. Si voy a modelos Ahí estamos. Ahora estamos en los
modelos de autos para esto, fui a sumar un nuevo modelo y esto sería
un Sony para Nissan. Ahora, el aviso sí lo creó. No quiero que el usuario me
diga cuándo fue creado. Esto es algo que
debería ser automático, que quiero que eso
suceda en segundo plano. No quiero que esto no
deba estar en la pantalla para que el usuario vea y herramienta que necesita estar sucediendo
en segundo plano. Así que ten en cuenta más adelante cuando empezamos a
mirar los modelos. Porque cuando estamos
utilizando los modelos de datos, esta es una de las
limitaciones que necesitábamos para la base de datos o no
lo queremos para la interfaz de usuario. Hay momentos en los que
tendríamos que crear una separación entre lo que
mostramos al usuario y qué almacenamos realmente. Esta es una de esas situaciones. No queremos mostrar al
usuario este campo en absoluto, pero sí necesitamos
almacenarlo en cualquier lugar. Sólo voy a proceder
viendo modelo es Sony. Adelante y crea un ISI notas intermedias creadas
se requiere. ¿ Por qué se requiere esto? Porque no pusimos
su requerido sobre él. No obstante, el tipo de datos
que utiliza es el tiempo, que al igual que el int, da un requisito automático. Solo estoy mostrando que sostienes
la dinámica de todas estas cosas cuando
ponemos las cosas. Si es necesario, para considerar
el panorama completo por el momento, o cuando nos encontramos con este
tipo de temas, cómo podemos trabajar los nuestros propios, son más a entender hacia trabajar los nuestros propios. Es por eso que hice requerido
fecha creada lo siento, está siendo terco y
diciéndonos que se requiere calor, así que eso está bien por ahora. Sólo para ir más allá de esta casa, por favor solo ponga en
una fecha creada. Y ahí vamos. Para que
podamos sumar algunas cosas. Spider, que es Ferrari, acaba de hacer que hoy Create. Y tenemos Toyota. Harrier fue el
primero en nuestro sistema. ¿ Qué otro? Lo siento, no recuerdo
cuál es la mezcla que tenemos, así que déjame solo mirar la mezcla. Tenemos a Nisan.
Eliminé los extra, así que tenemos al menos
uno a 2171 Ferrari. Eso es bueno. En nuestros modelos. Nosotros los tenemos. No, necesito algunos colores y sólo voy
a mantener esto simple. Sólo voy a decir
negro y azul. Y azul. Cuando voy a crear un auto, autos y digo Crear Nuevo. Recibo la lista desplegable para mí. Yo consigo el modelo de auto. Pero los estoy viendo a todos. Podría decir fácilmente
Toyota spider. Después vemos el identificador de llamadas
, negro y azul, el año, digamos 2020. Y el número de matrícula, como dije, en mi país, puede ser alfanumérico, por
lo que podría ser 1234 AB. Ese es el
formato general que creamos. Al menos vemos
que está creado, pero no estamos viendo modelo, no
estamos viendo color. ¿ Dónde estamos viendo el color
moderno? Foto uno que acabamos de crear. No lo estamos viendo
por la misma razón. No vimos el micrófono inicialmente porque en nuestra consulta cuando
estamos obteniendo por el índice, así que déjame simplemente
saltar al índice los autos en esa consulta. Tenemos que incluir. Por lo que tengo que asegurarme de
que digo incluir. Lo que estoy haciendo es sólo romper líneas para que solo
pueda controlar D en esto y conocer mi
vida mucho más fácil. Trabajando más inteligente, no más duro. Cuando se obtiene los autos
incluyen el micrófono, el modelo del automóvil, el color, y luego la última versión de Visual Studio Code,
aplicar cambios de código. Adelante y golpea refrescar, y estamos viendo al menos
con la reaparición del color. Así que vamos a depurar y ver por qué no estamos
viendo el modelo. Por lo que hice todos los Incluye. Puedes seguir adelante y reiniciar si ya
estás corriendo
en modo de debug, pongo un punto de ruptura aquí para que cuando se carguen los
datos se detenga y me permita entrar
e interrogar a cinco autos. Cuando el auto que acabo de
añadir tiene que hacer identificación, pero no tiene identificación
de modelo de auto. Eso significa que algo salió
mal con la forma entre el formulario que se presenta
y que llegue aquí, algo salió mal. Eso está bien. Así que pasemos a Crear y ver qué
podría faltar. Entonces ese es el problema. Wow. Copia NPS. Si bien es bueno. Sólo ten mucho cuidado. Todavía lo estaba vinculando
al campo equivocado, por
lo que debería ser mic. Guardo eso, refresco
o Aplicar cambios de código. Vamos a intentarlo de nuevo. Adelante y carga
el formulario Crear. Llegamos al bloque de araña 1990. Y solo reutilizaré ese número dividido de
lección. Quitar estos puntos de ruptura. Por lo que sólo va adelante y
carga y ahí vamos. Está viniendo botón
o la encuadernación está sucediendo como esperamos. Eso es bueno. Eso es maravilloso.
Batallas peleadas. Si vamos a Editar a ninguna parte viendo
todo lo que teníamos a Putin. Si cambio esto
de negro a azul y de Toyota a contratar
porque se dan cuenta,
oh, cometí un grave
error y hago clic en Guardar. Entonces vemos, estamos de
vuelta al cuadrado uno. Estamos a punto de cuadrar
uno porque actualizé el create y uso el mismo
código aquí en la actualización. La actualización aún tiene ese error. Las pruebas de regresión
siempre son importantes en cualquier momento en que introduzcas
cambios en su sistema, retroceda y
asegúrese de que lo que solía trabajar acería. Así que permítanme volver a intentarlo. Ahorra y ahí vamos. No, la edición está funcionando, crea estos funcionando, todas
esas características funcionan. ¿ Funcionan las necesidades? Vamos a revisar. Muy bien, así que todo
funciona de la manera que levantamos. Es el siguiente elemento de ticket grande
fue que cuando
creamos, queremos
asegurarnos de que solo exista el modelo
respectivo relativo
al micrófono. Eso significa que cuando
creo un modelo, necesito hacerle saber a
qué hacen que pertenece. Y luego herramienta cuando selecciono
un micrófono al crear el auto, necesito asegurarme de que estoy cargando solo
los modelos los que se relacionan con todos. Muy bien, así que eso es
muy importante, eso es, fue muy importante. Destacaron aparte
en la reunión. Entonces veamos cómo
podemos hacer eso. Entonces lo primero que tenemos que
hacer es introducir un ID de micrófono. Entonces necesitamos crear una
relación entre el modelo y el mic y
pensarlo conceptualmente. Porque, quiero decir, si tienes un auto y sabes que tienes ciertas marcas
fuera de autos esa vez, ciertos modelos. Esa es
nuestra relación. Entonces si fueras a hacer un
crucigrama pausas, Laura, una de esas actividades de
coincidencia de crucigramas
donde las marcas en la cabeza, en los modelos del otro
lado y debería coincidir las que relacionan
el uno al otro. Será el mismo concepto una clave foránea cuando
trates esa línea entre Toyota y
Harrier o Nissan y Sony, que está utilizando que
están relacionados. Para que esa relación se
vea como una llave foránea, que es lo que hemos estado
haciendo hasta ahora con el coche. Hagámonos. Salta fuera del modo de prueba y
vuelve al modo de extensión, entra en el modelo de automóvil. Fui a introducir
una llave extranjera. Ya tengo ese
tipo de llave foránea aquí en make, ID y auto. Así que sólo estoy copiando eso, saltando al modelo de auto. Y luego fui a presentarlo. Ahora tengo ese campo para hacerle saber que debe
estar relacionado con un mic. De la misma manera. Debido a esta relación, puedo ir a MIC y
hacerle saber que tiene una lista de modelos de autos
y ver cómo funciona eso. Entonces con eso hecho, estoy seguro que lo adivinaste, necesitamos una nueva migración. Entonces agrega migración,
relación modelo, ese es mi mensaje. Entonces obtenemos el archivo de migración, que no está haciendo nada divertido. Por lo que ya
sabemos que podemos mirarlo. Sólo sabemos que está bien,
está haciendo lo correcto. Podemos actualizar la base de datos
y cuando eso se haga, podemos movernos
en la multitud para nuestros modelos, modelos de automóviles. Tenemos que ampliar
el crear Peytchev, una lista desplegable para la mezcla. Y necesitamos y también
el Edit, lo siento. Entonces ya tengo ese tipo
de código. Una vez más, trabajar
más inteligente, no más duro. Así que sólo voy a
tomar esta forma grupo. Voy a saltar
por encima de los modelos de autos y en realidad voy a
quitar la fecha creada. Por lo que en realidad puedes
simplemente quitar el campo. No quieres sentirlo
en la página, lo quitas. Aquí. El encuadernación sería CAR modelo dot make ID
fueron tomados de mix. Eso no parece
existir, pero eso está bien. Fuimos a copiar esto también. Vaya a la pestaña de edición. No quiero que se cree la fecha. Necesito retener la puerta de identificación. Recuerda, siempre
retener lo oculto. Pero no quiero eso
sexual y solo quería hacer parte de la identificación. Muy bien, entonces voy a tener esa carga de datos iniciales para que
esa consulta inicial que
ejecutamos cuando tuvimos que llenar
los datos para la página. Así que sólo voy a
saltar a los modelos de autos. Fui a usar el método, fui a eliminar el exceso. No necesito esos
dos. Sólo necesito los mics. Entonces fui a crear
esa propiedad. Muy bien. Y luego incluir
cualquier referencia que falte. Entonces aquí solo haré mi
señor, llamada de datos iniciales. Y haré lo mismo
antes de devolver la página. Y esto está todo en
el crear un fregadero, algún tipo de exceso de velocidad
a través de esto porque esto es cosas
que acabamos de hacer y realmente solo
estoy copiando
y pegando el código que ya
pasamos en detalle. Entonces no estamos haciendo nada
especial en este punto. Es lo mismo. Sólo estamos reutilizando el
código que
escribimos y sabemos los conceptos de si
hacemos eso para la consulta, tenemos que hacer eso
también para la edición, que es Into tener lo
va a poner aquí, sangrar y generar
esta nueva propiedad. Y luego hacemos nuestra llamada, nuestra carga de peso,
los datos iniciales. Hicimos esa llamada
aquí también en las puertas antes de devolver
el pH que estamos hechos. Ya hemos terminado facilitando
make ID para nuestros modelos. Así que permítanme correr, saltar por encima a nuestros modelos crear. Y verás aquí estamos
sacando la lista de micrófono. Tenemos el modelo
teórico de capacidad, alguien a decir Sony. Y estás relacionado con Nissan. No quiero crear
esa. Muy bien. Por lo que en realidad solo
voy a eliminar todos los anteriores. Para que no haga clic medio en ellos, ábrelos en nuevas pestañas, elimine. Así que no lo he hecho, no he
extendido estas cosas, la funcionalidad lead todavía. Eso no es problema sin embargo. Todavía funciona. Por lo que elimine. Muy bien. Oh, pensé que
van a funcionar bien, no lo
hacen éste
está en el delete conflicto con algo
y marido terminado. Y creo que eso es sólo
porque estoy eliminando algo que no debería
estar bien. Borrado. Este error de eliminación
es realmente porque
creamos un auto que
tiene una relación con esta cerveza que está en la mía. Entonces permítanme
señalar esto desde la migración. Como dije, cada vez que
vemos flechas, no
estoy patinando bordeando políticas flechas porque
hay momentos en que
aprenderás los conceptos
sin ver ningún Arizona cuando llegues
Arizona y mucho para hazlo, es bueno ver a los
Arizona entenderlos. Cuando creamos las
migraciones, la mayoría, si no todas las
claves foráneas que se agregaron, se
agregaron con lo indebidamente se está refiriendo a realmente restringir. Si no estás tan
familiarizado con las bases de datos. Lo que pasa es que tienes la acción referencial que te
permite decir cualquiera de las dos, cuando elimino el registro padre, lo que significa que ya eliminas
un auto. No necesitaba como modelo de auto. Entonces eliminar todos los autos
que tienen esa asociación. Si iba a borrar un color, digamos
que elimino ese negro y agrego 50 autos en la
base de datos como negro. Si lo quisieras.
Cuando elimino el negro, eliminaría todos los
50 autos como bloque, entonces verías una cascada. Acción en cascada significa eliminar todo lo
relacionado con este registro. Lo
que nuestras migraciones nos
dan las restringen, razón por la que estamos recibiendo
esa flecha porque está diciendo que no vas a cargar herramienta, eliminar un registro que
tenga 200 registros. Entonces algo está confiando
en este registro. Por lo que sabré es confiar en el Aguilucho
requerido que tenemos no
puedo borrar
Harrier hasta que elimine todos los autos que son transportistas. Entonces el Dr. Glenn borra todos los registros
reales de autos
que son contratados, luego remontada y densidad. Sí, quería hacer la llanta. Eso es básicamente
lo que esto está diciendo. Es un error, pero no
es realmente, realmente, realmente un error. Eso está bien. Simplemente seguiré adelante
y agregaré otros nuevos. Me doy cuenta porque me
quité la fecha creada, está incumpliendo una escritura. Entonces no
me está diciendo que se requiere porque no está en esta
pantalla pensar que se requiere, pero cuando no se
proporciona nada a través de
ella, obtendrá un
valor predeterminado así, igual que dentro de T, si no se proporciona nada,
será por defecto a 0. Esto sería araña. Y la araña es realmente
relativa a Ferrari. Y el otro que teníamos, vamos a sumar otra barrera. Y éste es Toyota o
déjame usar otro. Déjame usar lexoffice o supra. Ahí vamos. Por lo que
supra Toyota crea, tenemos al menos
tres registros que están directamente relacionados con mix. Uno que sigue siendo una
especie de estatus libre. Entonces cuando voy a autos
y voy a crear, la expectativa es que no
debería estar viendo
todo en la lista desplegable como esta. Si hago clic en Toyota,
solo debería estar viendo que Toyota
relacionado en si hago clic en Ferrari al menos interruptores y propiedad sobre
los modelos Ferrari, eso es lo que espera el usuario. Obviamente eso
no está sucediendo ahora, implementemos lógica
para cumplir con eso suceda.
21. Agrega listas desplegables con JQuery: parte 1: Muy bien chicos. Entonces cuando estuvimos el año pasado, estábamos sentando nuestro
formulario y estableciendo nuestras listas desplegables para modelos
mixtos colores. No. El siguiente elemento de ticket grande es
que quieren que cuando seleccionen el micrófono de la lista, automáticamente filtrará la lista de modelos para su visualización. Repasemos lo que
tenemos en este momento. Tenemos nuestro formulario que tiene todos los micrófonos enumerados en
todos los modelos enumerados. Así que no quiero arrancar un agujero. Cambio el micrófono. Seguimos viendo
todos los modelos. Muy bien, entonces eso significa que
cuando elijo al sol, solo
debería estar
viendo soleado en base los datos que hay en la
base de datos en este momento, cuando elijo ferocidad, esta lista debe reconfigurarse
y solo mostrar araña. Eso es lo
que necesitamos implementar. Y la herramienta que
vamos a estar usando es JavaScript o jQuery. Jquery tiene esta característica
llamada ajax conjuntos de los que realmente hacen lo que llamamos llamadas
asíncronas, dijo al código del lado del servidor
desde el lado del cliente. Es decir,
estaremos dentro de la sección HTML estática de caballo, pero estaremos golpeando
servicio dichos mitos,
cargando la consulta, obteniendo los datos, y luego llevándola bucal
con el declive y dicho todo en tiempo real, vamos a
empezar esta fiesta
pasando a nuestra
página Crear para los autos. Y lo que vamos
a hacer es anular el valor id para los modelos. También vamos a sumar más
al valor id para la mezcla. Ahora, una explicación rápida. Recuerda que el
ASP dash four es ese ayudante de etiqueta
que cuando la página se renderizará nos
va a dar el atributo name
así como el atributo ID. Ahora cuando tienes ese tipo de nombre de doble cañón
como auto dot Manso ID. El ID en sí
va a salir como subrayado
del coche Manso ID. No quiero
una identificación tan complicada, así que siempre puedo
anularla con mi simple. Así que estoy agregando ID equivale a la mezcla
a la lista desplegable de la mezcla. Id equivale a modelos a los
modelos de lucha. A continuación, necesito
agregar algo de JavaScript. Recuerda que lo que
queremos logra que cuando cambies
el valor de ID de micrófono, vamos a estar cargando o
cambiando
dinámicamente los valores
que están disponibles en la lista desplegable del modelo. Voy a empezar en mis grupos de cumplimiento sexual
con una etiqueta de guión. Recuerda que eso es
lo que esta sección está dedicada para ello dime
quería escribir JavaScript. Siempre crea esa sección. Y luego pones en
tu etiqueta de script, y luego puedes proceder. Empecemos con
nuestros manejadores de eventos. Así que estoy viendo
un evento de cambio de valor en
la lista desplegable mix. Hemos visto que podemos ver para un
evento click en un botón. Por lo que más o menos puedes observar cualquier tipo de evento en
cualquier tipo de control, el tipo de evento
que elijas usar, el ISR relativo a cualquier operación que
estés realizando. Quiero que cuando cambie el valor de ID aquí o
el valor de ID Manso, que haga
otra cosa. Estoy viendo. Cuidado con mi elemento con el hueso ID Sumer no
querría un elemento por ID. Vemos un hashtag, luego vemos la mezcla de ID, ver cuánto más fácil es eso. Entonces el evento que estamos viendo
es un evento de cambio, va a ver a ver
cuándo se cambia el valor. Y luego especificamos que
queremos ejecutar esta función
siempre que eso suceda, función para obtener
el giro rojo. Como dije, una
cláusula de retiro al aire libre desde el get-go. Y así es que no lo olvido. Y luego romper
algunas lentes y luego podemos empezar a escribir
el código aquí. Lo primero que
quería hacer en este evento es obtener el valor. Ha cambiado. ¿ Cuál es la nariz de valor? Voy a decir var make
ID es igual a esto. Este objeto representa
cualquier control que activó el evento,
este valor de punto. Entonces quiero
Sentar los valores predeterminados
dentro del modelo. Entonces la mentira de
codificado duro que lo que voy a hacer es en realidad solo sacarlo del selecto. Entonces no soy difícil
codificarlo porque siempre
vamos a
estar cambiando los valores. Lo que sí quiero que el HTML
ahí sea ese bit
predeterminado de texto. Entonces voy a decir, consígueme
el elemento por los modelos de ID. Recuerda, selecciona modelos ID, dame ese elemento y establece el HTML en ese
elemento para que sea opción. Entonces esto se asustará, solo añada el HTML, sea cual sea el control. Simplemente agregará el HTML, lo que sea que pongas aquí con
eso dentro de las etiquetas. Cada vez que quisieras manipular
lo que hay dentro de una etiqueta, tal vez tenga un div vacío. Queremos poner otro
elemento ahí sobre la marcha. Eso es exactamente lo que estamos haciendo. Ahora tenemos la lista vacía. Sí, es conseguir los artículos de modelos y podría
dejar o quitar eso porque en la primera carga no
quiero que se quiten
ningún articulos que
cada vez que esto se cambie, entonces debería por lo menos
siéntate ese defecto. Etiqueta Html. Y luego vamos a ser
el llamado Ajax para ir y Fitch los valores de
la base de datos y
traerlos de vuelta aquí. Entonces para hacer eso, fui a ver un
signo de dólar dot conseguir JSON. Entonces este es un método jQuery Eso me permite llamar a una URL. Iba a poner comillas
vacías están ahí para la URL. También me permite
pasar los datos. Entonces en este caso, necesito obtener los
modelos basados en
el ID de micrófono, el nombre del parámetro. Eso es que voy a
usar este id de micrófono colon. Y el valor y
pasarlo es Manso ID. Entonces este es el nombre del parámetro. Este es el valor que noté
cuando resalto
esto, también resalta la variable. Este es el valor de
cualquier valor que
provenga del evento de cambio. Eso es lo que estoy
pasando a este método. Entonces tengo una coma, y luego esta función
básicamente dice, cuando tenga éxito, voy a hacer esto. Y se necesita, o tiene capacidad para tomar
un parámetro llamado, lo
estoy llamando datos. Los datos aquí representarían
lo que regresara de la llamada del lado del servidor. Voy a dejar
este caparazón de, de una función aquí. Dentro de esta zona
es donde vamos
a hacer con la magia
de llenar la pendiente. Pero esta es la plantilla básica. Entonces tenemos una URL, cuál de ellas lo
pone donde pasa por encima del valor make ID que se va a utilizar para
filtrar la lista de modelos. Entonces cuando consigamos, pero luego ellos mismos modelos, vamos a estar implementando
la acción en esa área. Fui a hacer una pausa aquí un rato. Y voy a
saltar al archivo de código
para este crear. Y lo que necesitamos poner
aquí es un método que en
realidad se llamará cada vez que ocurra
el evento de cambio. Entonces recuerda que ajax nos
permite hacer servicio. Tenía llamadas desde el código del lado del
cliente. Aquí. Voy a poner en lo que lo
llamaremos otro manejador. Entonces recuerda que estos
métodos se llaman manejadores. Y éste va
a ser resultados JSON. AyncTask pública
devolviendo resultado JSON. Y esto va
a estar encendido, en llegar. Así que recuerda que estaba
diciendo que tienes en get, eso es una palabra clave en post, Esa es una palabra clave. Cuando queremos un 100 personalizado, voy a decir sobre Git. Y llamemos a esto modelos, o incluso puedes llamarlo un auto movilizado si
quieres ser explícito. Así que en obtener modelos de automóviles, esto necesita un entero
que sería Manso ID. Ese es el parámetro que estamos viendo que vamos
a estar enviando. Necesitamos recibir ese valor dentro
del parámetro ahí. Entonces este método necesita
devolver resultados de un JSON. Entonces, ¿por qué necesitamos
ejecutar la consulta? Y dos, necesitamos atender
para hacer algunos resultados. Podemos hacerlo en una línea, lo
haré en dos solo para mostrar los modelos
VAR serían iguales
a los modelos de autos de punto contextual. Y entonces es bastante fácil decirlo
a la lista. Por lo que se ve que las dos
listas asíncronas sólo va a devolver cada
cosa en la lista, que es lo que hemos
estado haciendo aquí, pero eso no es
necesariamente lo que queremos. Queremos que se filtre. Entonces necesito inyectar
lo que lo llamaremos una condición o cláusula de dónde. Tengo que decir punto donde. Entonces ponemos en nuestra expresión
Lambda. Entonces q es mi token esta vez. Y fui a ver
dónde coincide la columna de MC ID con el valor que se pasó
a través del parámetro. Después de que lleguemos a todos esos, entonces solo voy a decir devolver nuevo resultado JSON con
los datos de los módulos. Lo que esto hará es en realidad tomar todos los objetos de la base de datos, los datos del
almacenamiento de la base de datos en lugar de modelos. Y entonces esto
solo devolverá todo eso en forma
de folk llamado JSON. Esto se queja
porque necesito, esperaré la llamada
a este método. No, tengo una idea del
camino que necesito llamar para que los datos
regresen al JavaScript, ahora
puedo decir getJSON,
tu URL, o la ruta a la
que debes llamar. Sería slash
autos, slash create. Supongo que eso parece familiar. Son flashcards serían los autos carpeta slash create
sería nuestro Create file, pero nuestro Create file or
create method que tiene el on Git y el on post también
tiene en get car models. Y este es nuestro manejador
de esa situación. Por lo que tengo que ver. A slash chicos slash Crear. Entonces pasaré una cadena de consulta en la URL
para ver el manejador al que se espera llamar en la página Crear es
igual a los modelos de automóviles. Observe la
convención de nomenclatura por aquí. Se llama On get. Esa es una palabra clave, esa es una expresión clave que
las páginas de Razor está buscando, pero el método en sí
se llama modelos de automóviles. Estoy viendo que tu
manejador es modelos de autos, así que no tengo que ponerme la
guitarra, la parte OnPause. Sólo estoy viendo
llamados modelos de autos. Después de hacer todo eso, tenemos el conjunto de URL
y tenemos los datos, o al menos lo que necesita
ser posible
como parámetro que
se espera obtener. Pero estos datos, lo que
voy a hacer es recorrer los datos y llenar manualmente
la lista desplegable. El motivo por el que habría puesto
esta línea es que cada vez que hago realmente motor
la lista desplegable mixta, quiero restablecer. Entonces con solo llamar a esta
línea se va a vaciar todo el HTML y se va a sentar sólo lo que pongo
aquí como el HTML. No, necesito tener
ajuste a los datos. Pero en el resto del HTML, signo de
dólar dot cada uno es una forma que voy a ver para
cada uno en JavaScript. Y la recolección
estaría viniendo de más variable aquí, datos. Por lo que los datos representarán el nuevo resultado JSON
que se devuelve. Para cada uno. Básicamente los objetos en los datos
ejecutan esta función donde obtengo una clave y
llamémosla un valor, una clave y un valor. Y luego abrimos y
cerramos eso y punto y coma. Así que no lo olvido. Entonces en este método forEach, básicamente solo voy a definir cómo
debería ser una opción. Entonces la opción var es igual a y voy a ver opción de signo de
dólar. Entonces signo de dólar,
opción de corsé
abierto, opción de entrañas abiertas al
igual que la etiqueta. Entonces queremos esa etiqueta
upsilon ahí. Voy a añadir un atributo. Entonces recuerda que un
atributo que es muy esencial para una
opción desplegable sería el valor. Estoy agregando este atributo y
voy a decirle que es valor
es el valor dot d. De acuerdo? Porque recuerda que cuando
esto devuelva la lista de modelos o una tabla modelo nos va a devolver
el ID cortesía de
la herencia de entidad de dominio base también
está dando nombre a vodka. Sí, se da sobre
Manso ID y lista de autos. Eso está bien, pero sí
necesitamos aquellos realmente necesitan el ID para el valor y
el nombre para la pantalla. Puedo inferir que
el resultado JSON, que acaba de
devolver resultados de mismo a nosotros o resultado de un montón de objetos de la misma clase que
acabamos de mirar. Definitivamente va a tener la sección de valor, un campo ID. Y luego fui
a agregar punto txt sea el nombre de valor para cada opción, para cada valor o cada cosa que
volvía a través de los datos. Obtener el valor. Después construye una opción
donde estés poniendo
el valor como el
atributo y el texto, que será lo que estaba
entre lo abierto y el cierre. El apartado que
dice selecto modelo, que toma para ser un nombre válido. Después de haber construido una opción, lo siguiente
sería anexarla. Solo voy a ver
los modelos dot anexar a, pero solo anexar opción. Entonces anexar saber se
sumará al final de
lo que hay ahí dentro. Entonces cuando digo punto HTML, se vaciará Totalmente
lo restablecerá a cualquier
valor que quiera aquí. Si lo quisiera en blanco, solo podría decir que tu
HTML no está en blanco. Tu isquio, no
hay adopción. No obstante, en este caso, no
quiero
limpiar los baños. Ya está
limpiado con el valor predeterminado. No, solo quería anexar las otras opciones, la predeterminada. Ahora con todo eso hecho, lo que voy a hacer es introducir aquí un pequeño
método que uso para depurar llamado console.log. Siempre que estés tratando de hacer tu JavaScript o
jQuery y no del todo seguro si lo que estás
haciendo está funcionando o qué valores se están
pasando se están estableciendo. Siempre puedes hacer un
console.log que
imprimirá en el
área de consola de tu navegador, mostrándote lo que
sea que estés imprimiendo. Así que fui a hacer un registro de
consola para el Manso ID solo para
asegurarme de que estamos recibiendo por el valor del carrito cada vez que
hay un cambio. Y también voy a
hacer el inicio de sesión de la consola en los datos justo aquí cuando la llamada
JSON tenga éxito. Porque entonces verás
cómo se ve realmente JSON si no estás del todo
familiarizado. lo que estoy hablando
cuando vea a Jason, digamos en
cuanto a ser una aldosis para controlar F5 o más bien lo
haré en modo de debug, establecer un punto de ruptura aquí mismo podamos ver exactamente cuándo
ese método se llama. Podemos seguir adelante y obtener una mejor comprensión
de cómo funciona Ajax. Muy bien, así que estamos en la
página millenia, mira aquí uno, no
hay nada en esta lista
desplegable porque uno, quitamos nuestros
ítems ASB de ella. Así artículos ASP, por lo que el mic, pero para los modelos No
hay artículos ASP. Entonces a pesar de que llamamos a la base de datos en segundo plano
y
cargamos datos iniciales, no le dijimos de
dónde debería estar sacando sus reactantes de entrada. También eliminamos la
opción predeterminada de esta lista enlazada. Entonces estamos obteniendo una lista desplegable
en blanco. Hacer está bien. Ahora cuando hago clic en Toyota, mira lo que pasa es
saltar a mi punto de descanso. Eso significa que la llamada Ajax está encontrando
con éxito
al manejador. Sólo voy a
saltar a la última línea que
podamos ver
lo que hay en los modelos. Ya ves aquí, eso
es, en realidad tiene el único modelo Toyota
que está en la base de datos. Eso es todos los datos que está devolviendo todo
en la base de datos. Entonces podríamos refinar esto
un poco más porque realmente no necesitamos
todas estas cosas. Realmente solo necesitamos el ID de
micrófono y el nombre. Muy bien, pero eso está bien. Vamos a seguir adelante
y continuar o lo siento, sólo
necesitamos la
identificación y la rodilla. No necesitamos
hacer ningún arrepentimiento si acabo de golpear a F5 y
permitir que continúe. Ahora verás que el
texto predeterminado se está cargando en. Uno sin cambios. Se siguió adelante y estableció el HTML. Y luego dos,
hizo la llamada Ajax, que luego recupera estas cosas. Entonces eso significa bajo
eso voy a ver supra saber cuando
hablo de log de consola, si haces clic derecho ve
a Inspeccionar Elemento o calentar si 12 y haz clic en Consola, entonces realmente
verás la consola. Se mensajes que se imprimen aquí. Este es un error al intentar cargar las cosas impresionantes de la fuente. Entonces eso es minúsculo
en este punto, lo que ves aquí
que la consola está registrando las ideas de micrófono. Uno, si cambio esto a
Nissan, ves que es Herramienta. Si lo cambio de nuevo a
Toyota es cada uno. Entonces cada vez que hicimos el
cambio, estamos registrando consola, podemos ver qué valor
se está eligiendo. Debajo de eso. Te darás cuenta que soy
mucho más complejo buscando constructo y esto es lo que JSON realmente se ve así. Si amplío esto, eso es lo que
llamamos objeto JSON. Json es JavaScript Object
Notation, que es un estándar
muy, muy popular
para transportar datos a través de la web,
http en este momento. En este caso, lo que hizo
fue tomar todos los datos de la clase y
serializarlos en pares clave-valor. Entonces el nombre del campo y el valor que el
campo tendríamos. Entonces por eso ves
nombre con un valor de Manso ID con el valor
make, etcétera. Entonces es el mismo tipo de
restricción que acabamos usar aquí cuando
estábamos haciendo la llamada, esa es ésta. Aviso clave o un parámetro de dos puntos. Y el valor justo desde que
estoy usando una variable, pero en este caso surgió
en los valores literales. Después de obtener ese objeto
de la llamada ajax, somos capaces de saber simplemente acceder a los valores individuales o a
los valores por sus claves. Es, es un objeto y también
es como una matriz. Es una matriz de
estos objetos JSON. Si tuviera múltiplo, dile que lo hace en el sistema. Así que déjame ir y
crear unos cuantos más y modelos. Acabo de crear alrededor de dos Toyota
más en el sistema. Entonces mira lo que pasa cuando
te toco respondiste Nissan, pero estoy cambiando
buck a la norma Toyota visto que hay tres
Toyota en el sistema. No me detuve ni
nada literalmente, acabo de pasar los creó. No hay en la base de datos. Cada vez que golpea
la necesidad de ocupado, va a recuperar
los valores más nuevos. Y hay objetos JSON. Entonces estamos viendo a cada
uno de los autos en su propia representación JSON y siendo representados
aquí mismo en la lista desplegable. Entonces eso es lo que llamaremos lista desplegable en
cascada. Las personas que solicitaron
esta función no sabían que querían una lista desplegable en
cascada. Ciertamente no
apreciarían el nivel de esfuerzo que se va a
crear tal constructo. No obstante, como desarrolladores,
siempre nos van a dar los requisitos y depende de nosotros encontrar
la mejor solución. Entonces en este caso, jQuery fue la
solución más fácil para algo que, como dije, jQuery
o JavaScript. Eso no es algo que
vayas a
escribir siempre necesariamente, pero definitivamente te resulta útil cuando tienes ciertas situaciones que necesitan soluciones
rápidas y limpias. Solo a modo de limpiar, lo que voy a hacer es simplemente
eliminar estos registros de consola porque realmente son
para fines de depuración. No quieres
dejarlos en tu código. Porque cuando tu aplicación se hace pública o el
castor podría verla y quería entrar
información o información potencialmente sensible
en su propio navegador, registros de
consola para tu
sitio web. No quieres eso. Después de que hayas depurado a Daniel, lo
arreglaste y ya sabes, funciona. Siempre puedes
seguir adelante y quitar tu console.logs. Eso es realmente. Entonces otra actividad de limpieza o unas cuantas actividades de limpieza, comenzando con el FID
que realmente querría este defecto estuviera
ahí en todo momento. Entonces lo que yo haría es
también replicar esto. E incluso entonces podrías
ponerlo en un método. Pero lo que haré es
poner esto fuera de
nuestra función de cambio de mezcla. Entonces eso significa en
cuanto se cargue la página, siempre
estaremos
sentados esta opción. Esa es una opción. La otra opción es
que simplemente
lo devolvemos cuando se carga la página. Sólo tenemos la opción predeterminada aquí que dice select modelo. Pero por supuesto no tiene artículos
ASP, por lo que está vacío. Esa es la única opción
que estaría ahí. De cualquier manera cuando cambies, siempre ese valor antes que añada los valores
provenientes de la base de datos. No, fuera de eso, otra limpieza que yo
querría está en los datos iniciales del
Señor. No necesito llamar a los modelos. Si los voy a estar
cargando dinámicamente, entonces no necesito llamar a esta consulta cuando la
página se esté cargando. Entonces esa es una
consulta de lista por adelantado. Y eso sólo va a
llevar a un tiempo más bajo más rápido. Hemos hecho todo
eso en el Crear. Vamos a seguir adelante y cumplir con los mismos cambios en la actualización. Y entonces aquí es donde
puede volverse un poco complicado de nuevo. ¿ Voy a
repetir todo esto? Entonces en este momento, lo que sería, nos inclinaría a
hacer es simplemente copiar esto, ponerlo en actualización
y copiar esto,
lo siento, este método de resultado JSON
y ponerlo más en optimista. Yo estaría de acuerdo en que tal vez este método de resultados JSON
necesite ser duplicado. De acuerdo, puedo aceptar eso. Pero cuando volvamos veremos la
mejor manera de
compartir realmente el código entre las
actualizaciones y el create, tal manera que si hay
necesidad de mantenimiento, una vez más, hay uno o muy
pocos puntos de contacto y reduciendo así los esfuerzos
de mantenimiento a largo plazo.
22. Agrega listas desplegables con JQuery: parte 2: Y estamos de vuelta. Entonces en esta lección, lo que vamos a
estar haciendo es modificar nuestra actualización para poder hacer
la lista desplegable en cascada. Y lo que no queremos
hacer es repetir todo
este código entre los dos puntos de vista porque vamos sólo muck camión. Tenemos demasiado baja la
lista desplegable del
modelo para repoblar cada vez cambia
el
valor de lista propio de la gota del micrófono. Eso se obtiene en la página Crear. Y eso también tiene que seguir para la página de actualización porque es más
o menos la misma forma, lo mismo que se esperaba. Ahora el pH de actualización tiene un requisito
adicional donde cuando vemos que tenemos el mic y ese valor ya se
proporcionaría cuando seleccionamos un
auto para actualizar o para editar, seleccionaríamos un auto. El pH o este formulario de actualización se va a cargar con todos
los valores para el automóvil. Se va a cargar con
un valor para el micrófono. Pero entonces esta lista desplegable por defecto va a estar vacía. Entonces recuerda que nos estamos moviendo, los artículos tendrán que cargarse
dinámicamente. Y también quiero
asegurarme de que esté cargada con la, sólo los modelos. Ese es nuestro relativo a
cualquier micrófono que fue seleccionado. Entonces si esto era Toyota, entonces solo debería estar viendo los valores de Toyota cuando se carga
la página de edición. Entonces esa es otra modificación que vamos a
tener para asegurarnos de que contemos cuando escribimos
nuestro código para cumplir con este
script compartible. En primer lugar, vamos
a tener que ponerlo en su propio expediente. Y discutimos que desde los primeros días cuando
hablamos de frío para mí, el JavaScript compartible a través múltiples archivos o páginas, ¿verdad? Por lo que aquí
se aplica el mismo concepto. Lo que haremos es ir a
nuestro dub, dub, dub root. En nuestra carpeta JS,
sólo voy a hacer clic derecho. Y voy a hacerlo, si
tuviera un nuevo archivo JS, así que solo Agregar Nuevo Elemento. Y francamente, normalmente solo elijo algo aquí porque conozco la
extensión de archivo que es a la vez. En lugar de tratar de
encontrar exactamente el uno. Y solo puedes buscar por aquí y
puedes ver JavaScript. Por lo que obtienes el archivo JavaScript. Eso está bien. Pero en última instancia lo que quieres es algo con la
extensión dot js. Simplemente llamaremos a este guion de modelos en
cascada. Adivina bromeando. Lo siento, permítanme obtener el script de la lista desplegable de mi
modelo de cascada roja
girando . Entonces estoy nombrando esto
explícitamente porque
quiero que quede muy claro lo que
va a tener el archivo script. Script de lista
desplegable del modelo en cascada. Presiona Enter, y luego
generará ese archivo para nosotros. Esta última columna está vacía. Si los usas
otra plantilla, solo limpia todo,
altera más lejos. Lo más importante
es que tiene el punto JS como extensión de archivo. Saber lo que voy a
hacer es tomar todo esto, cubrirlo, y luego
solo voy a
pegarlo dentro de nuestros archivos GIS. Entonces eso es simplemente suficiente y saben que
tenemos el archivo js. Lo que haremos en Los crea y las páginas de actualización será reemplazar la etiqueta script por
el componente SRC. Simplemente dice que Script SRC es igual a una inteligencia te
ayudará a llenarlo. Simplemente controlas específicamente
no ves ningún aviso. Slash cascada Lista
desplegable del modelo en cascada script.js. Simplemente puedes copiar eso y
asegurarte de ponerlo en un lugar similar en
la página de actualización. Nota, ya que
la mayoría de los modos
no estamos haciendo arte a Quito a
la operación de actualización. Tenemos que asegurarnos de
que el formulario de actualización se vea igual que el formulario de creación. Parte de eso es asegurarse que los mismos controles sean,
los controles correspondientes tienen
los mismos valores de ID que
se ven en el formulario de creación. Una actualización asegura que la
mezcla tenga ID es igual a mix. Y asegúrate de que el
modelo tenga ID es igual a modelos. Acaba de hacer esas modificaciones. Y luego
volvamos a saltar hacia el archivo
JS y luego
continuar o trabajar. Ahora algunas cosas a considerar. Uno, sí, cuando estamos creando, está bien porque lo
hemos visto funcionar. Todo comienza
con los valores predeterminados. Y luego cuando cambiemos la mezcla, se espera que siga adelante
y Fitch los nuevos valores. Conoce el camino. Entonces no tenemos que
cambiar el buffer
porque ya existe
en la página Crear. Las actualizaciones en realidad pueden
simplemente llamar a esa misma ruta en todo
el archivo JSON
solicitudes u otras. Y eso debería estar bien. No tenemos que modificar ninguna
de esas cosas concretas. No obstante, hay que considerar que cuando el formulario no está en blanco, como en el caso de una actualización, va a
haber una ID de
micrófono presente por adelantado. Con ese make ID, necesitamos asegurarnos de que
rellenemos esta lista por adelantado. No podemos esperar a que
el evento de cambio en una actualización tenga presentes
estos valores. Eso es, esos son dos factores. Otro factor es que
necesitamos asegurarnos de
que el valor que fue seleccionado por el
usuario al crear. El vehículo es el valor
que se presenta. Entonces mientras estamos poblando
todas las opciones, como si tengamos tal vez Toyota, tenemos cuatro opciones para Toyota. Sólo uno de ellos fue
realmente seleccionado. Tenemos
que asegurarnos de que esa sea la que les sea visible. Como hemos visto en
la página de actualización, la lista desplegable
siempre mostrará el valor que se seleccionó durante la creación. Entonces tenemos que asegurarnos de
replicar ese tipo de lógica aquí con algunos retoques. Lo que haremos uno es tomar
esta declaración de Manso ID. Voy a ponerlo por encima
del alcance del evento. El evento sucede aquí, hace que no cambie la función. Esta función es nuestro evento. No voy a hacer que el ID sea
global a ese byte. Entonces al hacer esta
declaración en la parte superior
del expediente sin
aparatos ortopédicos son propiedad de ella ni nada porque nuestro alcance
es realmente abierto y cercano breves que la disfunción del evento está dentro del ámbito de este
cambio de evento porque el soporte se abre aquí
y se cierra aquí y todo lo que está dentro de
eso está dentro de su alcance. Entonces al poner este viejo conjunto de, no
hay ámbitos que sean
dueños de esta variable. Cada función y
cada otro bit de código que escribimos
pueden acceder a ella a voluntad. Así que eso está bien. Ahora que lo hemos hecho,
lo que tenemos que hacer es
también cumplir con este reutilizable. Por lo que en este momento está vinculado a la confianza
del evento de cambio. No quiero que se llame
sólo cuando
hay un evento de cambio. Quería que me llamaran automáticamente cuando
hay un evento de carga. Además, lo que voy
a hacer es cortar esto. Y debajo del evento de cambio, voy a hacer
una función personalizada, acaba de leer la función Lord. Y sólo vamos a
llamarlo Lord modelos. Sólo le estoy dando un nombre. Puedes hacer lo que
va a estar haciendo por nosotros. Y sólo
vamos a decir Pegar. Ahora que esto está en un método, puedo llamarlo así de bien,
así que puedo ver cada vez
que hace que esto cambie, quiero cargar modelos
antes de poder cargar modelos, sin embargo, tengo que obtener
el nuevo valor de Meek ID. Así que sólo estamos retocando aquí. Recuerda que este objeto realmente se refiere a lo que haya
desencadenado el evento. Ahora, esto está fuera
de los eventos, así que no puede ser esto
mientras estamos aquí. Entonces voy a
copiar esta línea y ver cuándo se activa este evento
, el valor de este control
que lo activó, y luego todo lo
demás puede fluir. No hay problema. No obstante, cuando es
global y se está declarando
después de decir manualmente consígueme el control con la mezcla de
ID y consígueme los valores. Así que solo les estoy señalando en
base a donde estás haciendo
las mismas líneas de código, la forma en que accedas a él
tendría que ser diferente. O sea, podríamos haberlo
accedido
así dentro del formulario mostrado, por lo que eso no sería un problema. Solo te estoy mostrando cómo
puedes reutilizar la sintaxis
de diferentes maneras. Entonces tenemos que acceder a
ella por su nombre aquí, pero luego tenemos opciones
dentro de nuestro evento click. Entonces con estas
modificaciones hechas, no
soy Lindsay ir más allá. Voy a ir a probar
y asegurarme de que la creamos
acería mientras la levantamos. Probando el Create,
voy a cambiar el Toyota y sigo viendo
subir Toyota, Ferrari. Entonces todo funciona
en el Crear. Entonces con esos ajustes menores, tenemos rutina y toda la funcionalidad que nos habríamos
quedado con la última vez. No hay problemas. Así que
crear todavía funciona, limpió algunos de mis registros, especialmente aquellos con nuestros modelos
financiados y así sucesivamente. Acabo de limpiar la base
de datos de la misma así es volver a entrar en ella. Por lo que no, el objetivo
sería que cuando hacemos clic en Editar, veamos a Ferrari acercándose. Pero lo que no estamos
viendo nuestros dos modelos o el hecho de que fuera araña. Recuerda el bloque de araña Ferrari. Cuando hacemos clic en Editar, vemos por RT, vemos negro, pero
no estamos viendo araña, no
estamos viendo
ningún valor aquí. Entonces necesitamos que eso
suceda automáticamente. Por supuesto, cuando haga el evento de
cambio, sucederá, pero no queremos tener que
esperar en el cambio de
n para que eso suceda. Modificemos el
código en consecuencia. Y lo que vamos a hacer es
llamar a Lord modelos. En arranques. En cuanto se carga el script, queremos cargar los modelos
automáticamente entrar en uno, obtener el ID de Mecca. Entonces es automáticamente cuando se carga
la página de edición, este script
obtendrá el valor aquí. Entonces cargar modelos dirían, seguir
adelante y cumplir con
el JSON llamado política en la idea de Micaías
y conseguir las opciones. Muy bien, así que déjame sólo distancia ver si
eso marcó la diferencia. Acabamos de actualizar la página. Y si miras déjame
simplemente refrescar de nuevo, construyendo esos refrescarse correctamente. Así que sólo estoy refrescante para
Ari cargado y si miras, verás araña en la lista. Exister. De igual manera para el Toyota, si solo hago clic en editar mientras
dice select modelo, sí tiene todos
ellos en la lista. Entonces al menos esa
parte está funcionando. No, necesitábamos asegurarnos de
que estemos seleccionando la correcta al cargar
la lista desplegable. Aquí hay una forma genial de
que podemos pasar el valor que viene
a través de nuestra vinculación y desde el
lado del servicio a nuestro script del lado del cliente y luego usarlo para
informar nuestra decisión. En esta etiqueta de script, podemos pasar
parámetros de valor aquí mismo. Voy a decir que el ID
del módulo es igual a. Y luego entre
comillas salida para añadir signo, modelo dot auto dot auto modelo ID. Aquí mismo. Acabo de pasar por
encima de nuestro parámetro cuando llamas a este script, cumple con este valor disponible para él. Y así es como
se debe llamar. Agradable y genial. Entonces el al letrero una vez más, se utiliza como parte de la
sintaxis Razor en cualquier momento
que lo veas, Así es como podemos
acceder a C-Sharp. Se puede usar eso al firmar y si las declaraciones aquí para
sueltas, sea lo lo
hemos visto múltiples lugares, pero así es como
realmente podemos usarlo para
nuestra propia ventaja. Queremos que sean los valores
allí y lo estamos mezclando con
la sintaxis estándar de
JavaScript. Conocer el propio
archivo JavaScript. Lo que puedo hacer es decir que el ID del modelo
vd es igual al documento es una palabra clave estática que representa este
documento en el que estoy, o el documento, que
significa la página. Lo que siempre decimos
document.ready cuando queremos inicializar nuestro
JavaScript o jQuery, más bien, documentar dot
script actual y obtener atributos. Entonces los atributos
representarían este parámetro. llamamos por su nombre. Entonces estamos viendo ese
atributo y estamos almacenando cualquier valor que fuera posible con ese atributo
dentro del ID del modelo. Entonces debajo de la opción, fui a introducir
una declaración if que dice si el valor dot ID. Así que recuerda que
cuando estamos recibiendo todos los autos como los datos
o de la llamada JSON. Esto ejecuta la consulta
contra el Manso ID y luego devuelve todo en forma de los datos
esféricos llamados. Entonces estamos iterando
a través de datos y viendo darme cada par
clave y valor. Clave sería el nombre y
devalúa lo que realmente queremos. Crea una
variable de opción que representa una etiqueta de opción HTML con el valor de atributo almacenado
en el ID de punto valle. Y toma eso está presentando el nombre que vino
con ese par clave de valor. Entonces estoy viendo si el ID de la opción actual
que estás construyendo, si la idea del núcleo
invitado que estás evaluando u otra
parte es el ID del modelo. Entonces esa opción,
agrega una propiedad, dale el nombre
seleccionado y elige. Entonces prop, un ATTR o atributo
puede verse muy similar. De alguna manera hacen lo mismo, pero solo
te estoy mostrando diferentes formas en las que puedes escribir código similar. Aquí. Solo digo opción esa
propiedad, Añadir Seleccionado true. Después seguimos adelante y lo anexamos. Con esos cambios realizados. Sólo voy a guardar
todo y luego podremos volver a
saltar a nuestra
edición y vamos a identificar, actualizarlo,
refrescarse y trabajar asientos. Fui a volver a
List Toyota Supra. Cuando hago clic en Editar, super se carga
automáticamente
aunque la lista esté llena, supra es la
que se selecciona. Si vuelvo por nuestra araña es tan dentro
del, muéstrame araña. Por lo que se fue Fichte
todos los modelos desde el JavaScript y luego los
evaluó y vio
que, que uno mucho el
que fue seleccionado. Si acabo de hacer un elemento inspeccionar, ve en esa opción, seve en esa opción,tiene el valor comprado la propiedad se
estableció para seleccionarla, así que por eso
flotó hasta la cima. De acuerdo, entonces eso es básicamente
todo lo que necesitamos hacer para nuestra
lista desplegable en cascada funcione
tanto para la creación como para
la actualización en general, ese es el concepto detrás, supongo que dejarse caer en
su en cualquier momento que estés utilizando un sistema donde
seleccionas una opción y esa opción influye el resto de la forma o en
el resto de las opciones. Esto es todo lo que están haciendo. Lo están haciendo es
mirar para ver. ¿ Cambiaste el valor
en esta lista desplegable? Éfeso lleva todos
estos comandos. Estos comandos podrían
estar ocultando partes, ocultando elementos de la forma. En nuestro caso, estamos
reorganizando completamente los elementos de
otra parte de la forma. Sea lo que sea que necesites hacer. Está justo aquí a
tu alcance. Estas cosas están ahí, canada difícil de memorizar y si no lo usas mucho, posible
que no necesariamente lo
tengas en fuego rápido y rápido. Recordemos cada vez que necesites hacer algo que sea pero
la realidad es que
una vez que entiendas el concepto
de JavaScript completo te puede ayudar a conocer páginas web
dinámicas y sostener pueden traer
hacia fruition su idea o una visión para una página o un formulario
o lo que sea. Solo hay que ir allí
e investigar HomeAway, hacer esto y
descomponerlo en tareas más pequeñas. Sí, fue una gran tarea. Pensar en todo lo que se cayó sobre esto va a
cambiar los riesgos de la misma. Pero podríamos
detallar fácilmente y decir, de acuerdo, ¿cuáles son los escenarios
que necesitamos tener en cuenta? ¿ A quién tengo cono
para ese escenario? Escenario número uno, las opciones deben estar disponibles en todo momento. Para la edición. Y cuatro para crear, ambos confían en la
misma pieza de código. En lugar de escribir
estos dos lugares, acabo de ponerlo en un método y
llamar al método dos lugares. Entonces algo cambia un agujero de
perno vamos a formular o opciones o así sucesivamente donde solo tienes que
conocer al Chines uno, por favor. Entonces estas son cosas que solo con práctica y exposición, se volverá natural
y de segunda naturaleza para ti.
23. Arreglar pantallas de etiquetas: Muy bien, entonces nos estamos
acercando al final de las partes básicas de
la aplicación. Hemos configurado un crudo, hemos hecho algunas cosas geniales de
JavaScript. No, realmente se trata de
embellecer la aplicación. El primer embellecimiento portátil esta aplicación para mí
sería fijar las etiquetas. Por lo que tipo de poner en algún
esfuerzo para asegurarnos de que estas etiquetas estén colocadas correctamente
en la lista de autos. Pero entonces si nos fijamos
en modelos mixtos, los colores harán es sólo
mostrar el nombre del micrófono. Y luego si miras a
otros están viendo fecha creada así
como en los colores. Entonces querría
probablemente arreglar esto, hacerlo espaciado y
más legible por humanos, o simplemente eliminarlo porque no
creo que sean usuarios realmente necesitan saber en este momento
cuando fue creado. fecha creada es más para una auditoría del sistema que
para el consumo de usuarios. Podemos pasar y
ocultar algunos de estos. Otra cosa que me
gustaría priorizar sería en los foros para que
Alice cree coche. Estábamos viendo que
estamos viendo hacer IID de modelo de coche IID, identificador de llamadas. Ahora recuerda que
estos valores de ID son más para este sistema
luego para el usuario. Entonces el usuario va a
venir aquí y preguntarse, qué hace eso ID, pero luego están viendo nombres. En cambio las etiquetas
deben ver ver mansos o algo de color modelo de
coche. En lugar de Manso ID, ese número de matrícula, eso para mí debería ser un
poco más legible por humanos. Creo que sería bueno poner
en alguna validación
para asegurarse de que no hay dos vehículos obtener el
mismo número dividido de licencia. Creo que eso es detrimento
de la calidad de los datos. Tan pequeñas cosas como esa constituirían la actividad
de limpieza. Empecemos con
nuestras interfaces para el modelo y el color
que han creado las escrituras. Eso es simplemente suficiente. Podemos simplemente saltar por encima a esas páginas son
esas Es páginas. Entonces para el modelo, saltaré a la página de
índice y acabaré quitar la columna que
muestra la fecha creada. Voy a quitar esas dos columnas. Ir a hacer lo mismo
por el índice de colores, eliminarlo creado, y eliminar. Eso. Se ve bien hasta ahora para mí. En ese punto esa actividad
es buena y todo para el crear autos y actualizar o cuatro formularios para los autos donde
teníamos una identificación de modelo. Ves aquí que
dice Lear SP Sir etiqueta, ESP dash para auto modelo ID. Muy bien, entonces ya
miramos cómo podemos cambiar el nombre para mostrar para el índice donde es
un nombre para mostrar. Y dijimos que el nombre es
encuestador mostrar como la palabra modelo en lugar de
su nombre por defecto, nombre. Eso es simplemente suficiente. Todo lo que tenemos que hacer
es en todas partes
habríamos tenido ese valor de ID. Simplemente hacemos saber que
se supone que me ve. Aquí cuando estamos
creando el modelo, habríamos tenido la lista
desplegable para el ID de micrófono, mismo principio. Simplemente le damos el nombre de
visualización mic, para que la lista
desplegable sepa LC MC en su lugar. Entonces si salto al modelo, acabo de hacer un tramposo y
digo que esa es la actualización. La aplicación. Estoy corriendo sin depurar. Pero cuando voy a modelos y hago clic en Crear
nuevo, ahí vamos. No está diciendo hacer
en lugar de Manso ID. Entonces echemos un vistazo a los autos no se caracterizaron forma
que dijo make id, identificación del modelo de coche, e identificación de color. Entonces lo que quiero
hacer es ir a la clase de autos y sobre Manso ID, fui a ver tu
nombre para mostrar es igual a MC. Para el color su
nombre para mostrar es igual al color. Para la identificación del modelo de automóvil, su nombre para mostrar es modelo de automóvil. Entonces cuando guardo todo
eso y vuelvo, se va a
refrescar automáticamente y ya ves todo ahora se
ve un poco más
legible por humanos número de matrícula. Voy a
darle un nombre para mostrar. Y ese
nombre para mostrar va a decir espacio de
licencia número de
espacio dividido. Aquí. Si quisiera que fuera un poco más sofisticado que solo año, pude ver que su
nombre display se fabrica aquí. Solo te estoy mostrando
que cuando ves estas lindas interfaces limpias, esto es todo lo que están
haciendo en segundo plano. Dotnet hace que sea tan fácil para ti cumplir con
estos cambios en el fondo y
tenerlo fabricando aquí. Hace que sea mucho más fácil para ti ser consistente a través tu interfaz de usuario con sus etiquetas y cómo se ve
todo. Entonces eso es realmente todo para
esta actividad en particular. La siguiente actividad importante
para mí sería tipo de cambiar los botones o tener la consistencia
con nuestros botones. Por lo
que pasamos por esa revisión mayor con
tarjetas donde configuramos estos bonitos
botones de aspecto limpio para la creación, nueva, para la edición, para nuestra Crear, o un buck
para listar para la página de edición, guardar o un buck para
enumerar para los detalles, idiotas o un buck para enumerar, tenemos todos esos. Pero luego presentamos
otras páginas que nos traerán de vuelta
a las cosas por defecto. ¿ Qué pasa si realmente
quisiéramos cambiar, sostener estos look, o más bien es bastante
fácil cambiar o se ven porque lo hemos hecho. Vemos aferrarse a cambiar
cómo se ven. Pero lo que tenemos que
hacer es
asegurarnos de que
todos sean consistentes. La consistencia es clave. En diseño web. Quieres asegurarte de que todas tus páginas tengan ese tema
común detrás de ellas. Lo que vamos a hacer
es mirar todo el fin de semana estos botones y poner en foros
más reutilizables. Porque si tuviera lo que sí
tengo 1234 lugares diferentes
con botón Crear. Por lo que tengo un botón Crear
en la lista de autos, uno para estar en la lista de modelos
mixtos y colores. Pero entonces y si quisiera
cambiar el diseño general de un signo más a otra cosa o algo
o en el botón, tendría cuatro
lugares diferentes para cumplir con ese cambio. Cuando volvamos,
veremos cómo
podemos tipo de abstracto que es Alt y usar won
templado en todas las páginas.
24. Clean la interfaz de usuario: La última vez que estuvimos
aquí, estábamos tratando nuestras etiquetas en ninguna parte volver a limpiar los
cuatro botones y
el diseño general
de todos nuestros pH's, las listas y cómo fluye
todo. Estamos hablando de tener una plantilla general para secciones de
agujeros o botones. Mira. En esta lección, estaremos
viendo lo que tenemos parciales. Parcial es exactamente lo que sugiere
el nombre. Es como una parte de una página. Ya estamos usando
parciales porque nuestros puntos de vista,
estas vistas PFAS son técnicamente
parciales porque
solo es parte de todo lo que se
requiere para una página HTML. Y entonces lo que estamos
haciendo
es simplemente aleatoriamente o no
aleatoriamente, lo siento, renderlos
dinámicamente dentro de la sección particular del pH general que queremos. Entonces esta es nuestra página principal
y aquí es donde establecemos todos los estilos globales
y todo bien. Pero entonces estamos
representando los parciales en
base a donde estamos navegando, mostramos lo parcial para
que parezca el cambio. En realidad, las páginas están cambiando cuando todo
lo que realmente estamos haciendo es cambiar la sección
dentro del cuerpo de renderizado. Ahora podemos traer
que los conceptos no hagan un poco más a la página real. Y eso es lo que
vamos a hacer para conseguir los botones de índice. En este momento, tengo
completamente estudios botones de
índice para
la página de índice de autos. Es bastante fácil simplemente copiar. Saltar a los modelos de autos, ir a indexar, y
reemplazó los botones aquí. Eso es bastante fácil.
Entonces, una vez más, es bastante fácil hacer
eso para cada otra página. Porque realmente y verdaderamente los
botones necesitan verse iguales y nuestro enrutamiento es bastante consistente excepto
el hecho de que usamos el andamio predeterminado
aquí para la edición para los modelos de automóviles y todo else on donde cambiar eso para actualizar para el para la
edición para los carros. En realidad voy a deshacer eso. Fue solo trayendo a casa el punto de que
podrías cambiarlos. Cambiar el nombre de un archivo
es bastante simple. Tendré que decir que se
renombra el archivo superior, el archivo de código
también se renombrará. Pero entonces otra
consecuencia de eso es que me gusta
seguir siendo consistente con el nombre del
modelo en algún lugar para cambiar esto de modelo
opiáceo para editar modelo y usar
punto de control y hacer renombré refactorizar
a través y a través. Y luego cualquier, cualquier
ruta que hubiera llevado a actualizar que CSS HTML
necesita llevar a head. Habría por defecto. Solo estaba diciendo eso para decir que si vamos
a ser consistentes, necesitamos ser coherentes. No se puede nombrar una India, China, y otro
es cambio y así sucesivamente. Hace que sea más difícil para ti ser
realmente consistente
con tu código. Vamos a estar cambiando los botones
para todos los índices. Pero una vez más, no quiero
copiar y pegar el código. Lo que vamos a hacer
es en la carpeta compartida. Compartió el propósito
de Shard es que los diferentes parciales sean accesibles a través de
la aplicación. En la carpeta compartida. Sólo vamos a seguir
adelante y sumar, voy a decir nuevo ítem. Y desde la escucha
elegiría ver navaja. Si nos fijamos en la
diferencia entre matrices de B-árboles de vista, la extensión es la misma dentro la descripción
dice que hay una página viene con una página modelos. Entonces lo que hemos estado
usando para conocer IRI. Entonces páginas donde llegamos a
CSS HTML y el CSS HTML. No obstante, el aumento de vista
sólo va a venir con el
CSS HTML y eso está bien. A lo que voy a llamar a
este parcial es partiales de
índice de subrayado ,
lo siento, botones de índice. Al nombrar convención
liderar con el subrayado. La consistencia es clave. Botones de índice de subrayado. Y es justo para que quede muy claro, se
trata de un índice parcial de bonos, z
parcial de dos tripulaciones, el subrayado líder y los fines
financieros de
la palabra parcial. Para que podamos seguir adelante y sumar eso. Cuando tenemos este aumento de vista, necesitamos especificar un modelo. El modelo básicamente representa cualquier dato o tipo de datos que
regirá el tipo de datos que es accesible en este parcial. En nuestra facilidad
de uso regular habría
tenido modelo en el modelo San. Y verías
que están usando algunos tipos de clase complejos. Y por eso podemos hacer
algunas cosas maravillosas accediendo a los datos y
manipulándolos. No obstante, todo lo que queremos en el
pH son los botones de índice. Y todos los
botones de índice realmente necesitan que contaran como datos dinámicos, sería el
valor id que cada página tendría nuestra necesidad de
generar para cada ítem. Entonces todo lo que voy a hacer
es decir, diciendo modelo. Y lo estoy haciendo un entero
porque estamos esperando un valor entero
como el valor id. Los botones o el
código que voy a usar para los botones
vendrán
del auto porque estos
son los botones que ya
hemos diseñado muy bien. Sólo voy a ir
por aquí, copiarlos. Y estaba viendo que todo
tiene que ser consistente. Por lo que hemos cambiado la edición,
actualizamos a editar el enlace, y nos hemos asegurado de cambiar el nombre de la página también para que ya no
sea actualización, no es editar que todos
compartamos
lo mismo archivos básicos o nombres de archivos
prácticamente en todos los ámbitos. Alguien para copiar esto, póngalo en lugar
de lo parcial. Entonces vas
a empezar a ver líneas
rojas apareciendo donde item.name DID era porque
estaba viendo bien, no
veo ningún elemento ni ninguna variable u objeto en
el elemento con nombre Pease. No sé qué, pero
recuerda que nuestro modelo es el entero que básicamente representa el ID delta del elemento. Por lo que sólo puedo decir en modelo de signo, porque el modelo sólo
va a ser un entero. Esto estuvo cerca para
mostrarte que cada vez que
necesitas datos en tu
página o un parcial, solo
necesitas defender un modelo y usar tus
tipos de datos a tu favor. Modelo y modelo. Editar detalles, eliminar. Todos esos están en nuestro parcial en la página
que queríamos. Y fui a probarlo primero en
el discurso del auto, donde queremos
incluir el parcial, hay
que decir en señal
porque tenemos que leer algún C-sharp y vamos
a esperar o ayudante HTML. Y tenemos parcial un fregadero. Así que en cualquier momento estamos usando una asíncrona, tenemos que preceder
con un peso. Entonces este método toma dos parámetros o tiene
varias sobrecargas que estamos usando sobre sobrecarga que
va a tomar ganó el nombre de la parcial, que es botones de índice parciales. Entonces
también le vamos a dar el modelo. El modelo es genérico.
E puede ser cualquier cosa. No es hacer los supuestos que el modelo tiene
que ser nada. Te estoy diciendo cuál es el
valor que quiero pasar. Y lo
averiguará cuando llegue
al parcial real que está bien, el valor proporcionado es el
tipo de modelo que está esperando. Si dije Interior y
proporcioné una cadena, no
se cargará si digo Juan tipo de valor de datos y ellos
proporcionan otro valor de datos. Entonces si quiero, si digo que el
modo es el tipo de datos, pero proporciono un valor de
un tipo de datos diferente. No va a funcionar. Eso es solo hacerte saber es muy genérico pero
lo suficientemente estricto como para saber que lo que me
diste no es lo que
esperaba. Hemos hecho esa modificación
a la velocidad del auto. Si Control F5 y lo miro, estoy recibiendo 500 errores, así que estoy recibiendo
una excepción no invitada y, ya
sabes, no me
alejo de las flechas. Quiero que veamos
cuál es el error. En esta situación, estamos
obteniendo alguna idea de dónde buscará
un int, por un parcial. Por lo que estos son
lugares legales se puede poner un parcial de tal manera que cuando acaba de ver que este es
el nombre parcial, lo buscará
en estos lugares. Está buscando en las páginas slash autos barra de índice botón
parcial. No, no lo es. Los bordes de la terapia
inclinan las páginas barra inclinada compartida allí y las vistas barra inclinada
compartida el nombre. Sabemos con certeza que lo
ponemos en páginas slash índice compartido, parcial. Pero entonces dije botón In
parcial en el código, cuando llamo a los botones, ese es mi
error ortográfico justo ahí. Basta con seguir adelante y modificar eso, guardar y luego
volver y refrescar. Y en ninguna parte viendo
dos juegos de botones. Entonces nuestro código está funcionando
o parcial está funcionando. Por lo que ahora
probemos aún más para que
el parcial funcione. Entonces para modelos mixtos
y para los colores, voy a tomar esa
línea de código, una línea de código. Sólo voy a ponerlo
en todos los demás índices. Entonces si ya está en autos, déjame ponerlo en el índice
Para cuatro modelos, algo de madera para ponerlo en
el índice, cuatro colores. Voy a ponerlo
en el índice para mí. Entonces cuando guardo y controle, refresque cada uno de ellos, vas a empezar a
ver aparecer estos enlaces. Cualquier cosa que no sea refrescante, es
porque yo no salvé. Así que déjame volver. Ver botones nodales aquí arriba, botones
nodales aquí arriba. Por lo que se ve con
un esfuerzo muy mínimo, hemos esquilado estos botones. Déjame ver si todavía funcionan. Si hago clic en Editar,
navega a la página de edición. Si hago clic en Detalles, navega hasta el detalle. Sp, hará eso para todos
ellos porque una vez más, la consistencia es clave
para la navegación. Las propiedades son las
mismas en todas partes. Todos están buscando la ADA, mismo constructo o valores. Pero luego en relación con el mecanismo de
enrutamiento interno a la carpeta para modelos de un automóvil y para automóviles y para cada uno
de los otros. Sabe a dónde ir
cuando se hace clic. Pero es un código de base. Lo que ahora puedo hacer es
eliminar los predeterminados. Solo voy a pasar por
cada uno de los índices y vas a ver un montón
de limpios estos looks, estamos reduciendo tres
líneas de código repetido. Y en el caso de las
cartas, aún más carriles. Y acabo de quitar
esa línea comentada. Y eso se ve mucho mejor. Conoce que todo el mundo está en la
misma página con los botones. Saber antes lo habría dicho, te
animan cuando estamos
haciendo la otra herramienta cruda, intenta replicar toda la funcionalidad de
eliminación y el botón de borrar
con el click en el formulario y todo
a través de todas las demás páginas. Saber si queríamos compartir este bit de código a
través de las páginas, ¿qué tendríamos que hacer? Bueno, realmente no podemos
compartir el formulario. No recomendaría
intentar esquilar el formulario. Y definitivamente no podemos
compartir el manejador, pero podemos compartir el guión. Así que sólo voy a
crear un nuevo archivo JS. Nuevos elementos, lo siento, y
busca JavaScript. Y este nuevo
archivo JavaScript va a ser índice delete button script. Entonces podemos poner el, déjame simplemente volver
al código aquí. Toda esta función,
acabaré de cortar eso, colocarlo dentro del script del botón de eliminación de
índice. En este punto, en
realidad sí tenemos unas cuantas oportunidades disponibles para nosotros porque no
dije que compartimos un formulario, pero permítanme evaluar déjame
simplemente cerrar todo lo que
no necesariamente se necesita en este punto. En la forma, estoy siendo muy específico cuando digo que
el nombre es identificación del coche. No es necesariamente identificación de coche. Podría haberlo
llamado fácilmente ID de registro. La idea de registro en este punto es un
nombre mucho más genérico que solo auto. En lugar de mirar hacia adelante, solo el automóvil IBM fue a
buscar un ID de registro. Y voy a decir
Sit the record ID para ser igual a
los identificadores de datos en el botón. Así que recuerda que
todo el mundo está usando la misma plantilla de un botón. Entonces una vez que hagan clic en el botón, va a tener ese ID. Podemos usar el mismo formulario, sentarnos eso en un fin de semana, sólo tiene que enviar ese formulario de eliminación. Ahora puedo crear
otro parcial. Ya ves, así que déjame, antes
de crear ese parcial, Déjame ver SRC es igual a G slash index
button Eliminar dot js. Sólo asegurándome de que tengamos eso. Este formulario en realidad puede entrar en un parcial porque lo estoy
poniendo en un parcial porque no quiero copiar este formulario
a través todas las páginas y si algo
cambia con el formulario, tenemos que hacerlo todo otra vez. Entonces es mejor
simplemente ponerlo en un
parcial y pesado a un lugar en este año y
fui a tener otra vista de la maquinilla de afeitar. Así ve a agregar nueva vista de navaja. En cuanto lo vea. Ahí vamos. Y en la partitura
eliminar formulario o índice, eliminar formulario, parcial, suma, nombrarlo lo suficientemente bien como para que pueda ver el nombre
más tarde y figura, oh sí, para eso fue. Este parcial no necesita
tomar ningún conjunto de datos. Ni siquiera necesito
darle un modelo. Siempre va a tener
es este formulario de eliminación que está buscando un manejador
en cualquier página en se llama delete está pasando por encima de
algún registro nombrado con nombre. Llámalo un ID de registro o una
variable con nombre llamada Record ID. Eso es todo esto parcial es cuatro. En la página de índice, tengo otra forma
de incluir parciales, que es una
forma mucho más sencilla donde acabo de decir que nombre
parcial es igual y el nombre del
parcial a mano. En lugar de escribirlo
escaneos alternativos para el error. Acabo de hacer clic en él,
presiono F2 para cambiar
el nombre de copiar el nombre y pegar que está
funcionando más inteligente, no más difícil. Entonces puedo tomar esta cuadra. Y mientras está en
la página de índice de autos, puedo ponerlo en cualquier
otra página de índice. Cuarto de usabilidad. Por lo que ahora el antebrazo está
aquí y el guión está viendo el
botón eliminar de nuestros botones. Así que sólo puedo seguir adelante y
poner eso en cada página de índice. Muy bien. Nos estamos acercando
allí se acercaban. Una vez más, estamos promoviendo código, reutilización
y plantillas. Queremos poner en todo
este esfuerzo por adelantado. Es posible que tardes mucho saber, pero a la larga
es por una buena causa. Sepa que tenemos
el Foro Eliminar y todos están
viendo el ID de registro. Déjame ir al código
detrás para autos, ya que aquí es donde todo
empezó y luego fuimos a controlar y motor hace
colapsar todo. Y luego tenemos nuestra
eliminación de unpause tomando identificaciones de automóviles. En cambio, fui a ver
un ID de registro porque recuerda que esto es a lo que se va a vincular el
nombre. Solo estoy tomando el ID de
registro y
acabaré de cambiar el nombre de refactorizador
a lo largo del método. Y éste está buscando
el auto y luego va a intentar quitarlo y
redirigir a la fama del pH. Puedo tomar este método y
este método ES, nos encantó. Se repite este método
a través y a través. En teoría podríamos
hacer una página de resultados que tenga todos estos
métodos genéricos y los recuerden. Entonces como incluso con los autos
para obtener el resultado JSON, en lugar de tener
que repetirlo en la creación y actualización, podría
ponerlo en
un manejador genérico que solo nos aseguramos de llamar a
ese camino desde todas partes. Pero eso está bien. Ya sabes, si bien
suena como una buena idea
y suena lógico, puede
haber límites a
cuánto quieres hacer
todo lo que eres de ingeniería
utilizable. Y a veces tu contexto
determinará si
necesitas ir tan lejos. R-naught en este contexto, no
voy a ir tan lejos
con este método en particular. En cambio, voy a
dejar que cada página de índice retenga su propia implementación
de los borrados porque diferentes las diferentes páginas o registros pueden tener diferentes requisitos
para nuestra eliminación, ¿verdad? Entonces como por ejemplo, modelos, si fuera
a borrar un modelo, entonces probablemente
tendría que Elite todas las cartas relacionadas con el modelo antes de poder
eliminarlas modelo. La lógica dentro de esto
podría ser ligeramente diferente. En esta situación, el
delete aquí necesita mirar los modelos de automóviles y
eliminar los modelos de automóviles. Así que cualquier cosa que esté en auto, acabaré de cambiar el nombre del modelo del auto. Eso es implementación. Ese delete está presente en la página de modelos de automóviles dondequiera
que esté en los autos ya. Entonces en los colores, es el mismo principio, solo
agregamos eso y el ID de
registro sigue siendo el mismo. Renombro esto a color. Y estamos buscando
en la tabla de colores a través y a través. Y luego hacemos lo mismo. Pero de ninguna manera menos para mí, donde cambiamos la mesa
para mezclar cualquier cosa que dicho color o cualquier otra
cosa que pudieras
haber estado copiando y
pegando todo este tiempo. mezclan narices, conoce que cada página de índice sabe que tiene el método delete
buscando un ID de registro. El ID de registro viene
del formulario que acabamos de
poner en un parcial. Entonces cada uno de ellos
estaría buscando ese formulario de eliminación y sentado ID de
registro al valor. Y una vez más, el guión no es esquilado en todos los ámbitos. Entonces déjame seguir adelante
y probar esto. Seleccionamos un micrófono todavía a ambos. Lista no está poblando,
eso es sospechoso. Así que vamos a seguir adelante
e inspeccionar elemento, mirar a la consola
y luego estamos viendo esta CPRE no puede leer propiedad, obtener atributo de alma nula. Creo que ese error
tiene que ver con el hecho que estamos pasando,
en nuestro caso, estamos consiguiendo que el ID del modelo
sea lo que sea este atributo cuando se pasa
en la página de actualización. Seguro, para
el ATPase, más bien, estamos pasando
esos atributos, pero no lo hicimos
en la página Crear. Lo que he hecho es
introducir ese atributo en ese script en el Create pH donde paso en el
ID del modelo es igual a 0. Eso es de muy
pocas consecuencias considerando que en su
momento se estaban creando uno, no se presentan datos. Entonces por eso
no puedo usar auto dot auto modelo ID porque
auto está vacío, no lo es. Por lo que terminaríamos con la
misma excepción de conocimiento justo debajo de C lado agudo. En cambio, solo le estoy
dando un valor predeterminado de 0 porque
realmente no lo necesitamos. Ninguna extensión de eso va a, o una extensión de los requisitos de modificación
pasa a nuestro guión. Si volvemos al guión, vamos a evaluar
exactamente lo que está sucediendo. Cuando el guión se carga
por primera vez, está recibiendo la
atención médica que se presenta. Carga modelos, y
luego obtiene el atributo, y luego realiza el JSON. Pero mira esto.
Cada vez que vamos a estar cambiando la mezcla, vamos a estar
llamando a los modelos de carga, que luego va
a intentar obtener los atributos de nuevo y
luego hacer lo mismo. Realmente no necesitamos el
atributo más de una vez. Realmente solo necesitaba la
primera vez que se cargaba el pH. Porque después de eso,
realmente no nos importa lo que
podría haber sido seleccionado. Lo que debo hacer es atrapar esto y poner este
script global se está ejecutando, conseguir el micrófono, obtener el
ID del modelo, luego modelos Lord. Entonces hace eso. Cuando las mezclas cambiaron,
llegamos a hacer IID. Reiniciamos los modelos HTML
y cargamos modelos, que hace el Fitch. Esto realmente sólo
necesita arriba en una sola vez. Entonces ese es otro reflujo
para que probablemente
quieras considerar porque
creo que este error
habría roto la hoja de estilo en
cascada de puerta por cada vez que se cambie el valor. Si ves esa antes que yo, entonces kudos significa que hiciste
más pruebas que yo. Estos cambios realizados,
vamos a saltar de nuevo a nuestra aplicación web e ir a intentar o crear
para el auto de nuevo. Y luego hago Toyota, y luego veo, De acuerdo, Nissan y Ferrari hokey están en cascada
hoja de estilo es Buck. Permítanme pasar a la edición
y asegurarme de que
las fijaciones al peor si cambio la molestia y
viene para nuestra columna vertebral. Bueno. Estamos en proceso
de pruebas o crudo bloque Toyota Corolla. Este es un 2001
menor que el número dividido, y acabo de agregar otros
tres solo para acelerar el proceso de
adición de herramientas. Voy a probar el delete. Por lo que queríamos asegurarnos de
que la funcionalidad de eliminación aún funcione en nuestras velocidades de automóvil. Así que eliminar, estamos recibiendo alerta a nuestras
suites, eso es bueno. Si hago clic en Ok, se borra. Eso funciona para nosotros. Eso es bueno. Ahora si voy a las otras páginas, voy a crear una prueba aquí porque
dirijo las otras. Así que eso crea todavía
funciona, Eso es bueno. ¿ Funciona la eliminación
o mira eso? acerca la misma
alerta de suite. Y si hago clic en Aceptar, es llamar a la granja de eliminación y redirigir a la página
y todo perfectamente. Ahora vemos cómo podemos ponernos. Seguro que codificaremos a
alguien para que elimine lo más alto de la
lista de módulos que funciona. Después fui a
crear un nuevo color. Todavía tenemos la escritura creada, por lo que esa es otra actividad de
limpieza que habría
pasado por alto donde necesitamos
eliminar el campo de entrada para
escritura creada en algunos de ellos. Pero tenemos la prueba
y las obras de Borrar. Así como eso. Habríamos
configurado algunos parciales para asegurarnos de que los
botones luzcan consistentes. Para que ese mismo concepto se
pueda extender
hasta el botón Crear libro o Crear aquí
con un signo más. A pesar de que esos se ven limpios, pero ¿y si quisiéramos que todos se vean de
la misma manera? Entonces, en lugar de
crearlo o cualquier enemigo en este estilo para el botón
crear
no es el más bit de código, pero una vez más, es
cuestión de agujero. Quieres reestructurar tu aplicación
tanto como sea posible. En esta situación, probablemente, probablemente solo
comas clave y contenido con
solo copiar y pegar el botón Crear tal vez
de diferentes ideas para las diferentes mezclas Cree
en las diferentes páginas. Pero en última instancia,
probablemente intentaría poner eso en
algo que es reutilizable, sobre todo porque éste
no necesita ningún dato. Es sólo un botón o
una etiqueta de anclaje que tiene ese top kill Partisi
ASP, pitch dash. Dividimos por delante e hice
la edición yo mismo. No quería pasarte a través de cada uno
porque como dije, todo granularmente conseguir con la plantilla y los
botones y compartir capacidad. Eso depende de ti en tu
tolerancia para tal actividad. Yo seguí adelante y
lo hice y te voy a guiar a través de
él por si acaso es algo que
realmente, realmente estaría
interesado en hacer. Independientemente. Solo voy a
cerrar todas las pestañas y podemos simplemente mirar a través del sitio compartido, creado
otras adicionales. Entonces hicimos este juntos, botones de
índice parciales, sabemos lo que sabemos
y entendemos que
pasamos en los datos como un entero y podemos acceder a esos datos a través
o módulo de palabras clave. Ahora, para el botón Crear
parcial ya permanecerá la etiqueta p con el botón
crear. Y esto viene
de la que
hicimos juntos por los autos. Y luego en cada página, acabo de hacer la otra forma
de hacer referencia a lo parcial, que es ver
nombre parcial es igual a eso. Entonces, debido a que no hay datos que se necesiten para
el botón Crear, no
tengo que poner en ningún
modelo ni nada por el estilo. También puedes incluir
parciales como éste. Son como HTML estático. Y en
términos generales, cuando
necesitan datos, hay
que hacerlo así. ¿ Está bien? Entonces este HTML estático
buscando Target, acabo de poner eso en
los modelos de autos. Pongo eso en el índice de autos
dondequiera que lo necesitara. Yo solo lo pongo dondequiera
que crearan. ¿ Qué fue lo que acabo de poner el parcial. Una vez que consigo si quería
cambiar el diseño, solo
voy y cambio el diseño un lugar y por todas partes
se ve afectado. Ese es el crear. Lo hice por los detalles y todos los
botones de detalles habrían tenido este div con la
etiqueta ancla para ir a la página de edición. Y habría tomado el
ID de ruta en forma del ID de registro. Y luego agregamos el
buck al botón Lista. Es por eso que éste requirió un modelo en cualquier página de detalles
que se usara parcial? Hubiera tenido que esperar. asíncrona parcial llamó parcial al botón de
detalle, y luego solo paso
el ID según sea necesario. Otra parte de la limpieza
fue que eliminé los campos de fecha creados de
los foros de creación y del índice y así sucesivamente. Entonces esa fue otra
parte de la limpieza que como que hice fuera de la cámara. Pero una vez más, ser
libre de ser creativo. Siéntete libre de ser creativo
porque es tu aplicación, lo
sabes mejor, y tus clientes son la voz
que debes seguir. Entonces haz lo que creas que es correcto y puedes
hacer limpiezas que, o hacer modificaciones
a tu interfaz que no estoy considerando que le
están haciendo a la mía. Entonces el otro habría
sido los botones Editar, que son directos,
estrictamente HTML. Estos serían los botones Editar
al final del formulario,
el que se va a guardar, el que volver a Lista. Entonces en cualquier formulario de edición, solo
vería botones de
edición parciales, parciales. Simplemente pon eso y
recuerda que el grupo de
formularios
acabo de hacer todo el div, los botones y poner
dentro de este parcial. Por lo que solo puedes encajar en
esa parte de cualquier formulario de edición. Todos y cualquier formulario de edición
pueden obtener ese parcial. Una vez más, la consistencia. Ya miramos ediciones. Tenemos índice, eliminamos
y eso es todo. Esos son todos
los parciales que tengo. Esos son todos los
modos que hice. Y francamente, la
interfaz de usuario se ve de la misma manera. Un usuario nunca sabría que
en realidad hicimos todo
esto en segundo plano. Todo está renderizando
y funcionando como se esperaba. Hay botones en la página de detalles y nuestra eliminación funciona como
sabemos, debería hacerlo. Muy bien. Acabo de notar en la página de detalles de autos que está bien. Entonces algunos DTA o no regresan. Así que vamos a arreglar eso
mientras estamos aquí. Por eso estamos aquí después. Muy bien, así que vamos a saltar de nuevo
a nuestro detalle de la tarjeta, escuela atrás y creo que eso tiene que ver con el
hecho de que no estamos incluyendo suficientes datos
en nuestra consulta aquí. Sólo voy a
saltar a indexar y pedir prestado el código
que hace el incluye. En lugar de
escribirlo gratis desde cero. Y sólo voy
a colocarlo aquí. Y ahí vamos. Entonces estamos haciendo nuestros autos, incluimos todo
y luego consigue el primero o por defecto por ID. Y salva eso. Volver atrás y refrescar y conocer los detalles están
mostrando algo bueno. Simplemente pinchamos
y mirando botones. Y bueno, ese
apareció, ¿verdad? Entonces si vamos a cualquier página, vamos a ver el
mismo tipo de dinámica. Ahí están los botones, todos de la misma manera. Y eso tomó, no
limpié éste. No hay problema.
Por eso estamos aquí. Así que déjame saltar a los colores. Despegue la fecha creada. Muy bien. Creo que eso es todo
por esta actividad. En realidad,
probablemente puedas probar si te interesan los botones de
crear porque ves que
crean botones aquí, no te parezcas como si
quisiéramos que se vean
ahí está en los autos. No hice los
botones de crear para los otros. Entonces si es que compras en todos
los botones parciales y
teniendo todo reutilizable, siéntete libre de probar
ese por tu cuenta. Muy bien chicos, así que
en ninguna parte al final de otro hito, hemos puesto en algunas mesas
adicionales. Y está resultando ser
una aplicación maravillosa. Hemos mirado más
JavaScript y jQuery. Nos fijamos en cómo hacer alguna causa
avanzada hotel ella. Este lado del servidor y el lado del
cliente hablan entre sí mientras
la aplicación está ejecutando en la que se
manifestó en forma de la lista desplegable en
cascada. Miramos cómo
podemos compartir plantillas a través de múltiples páginas
usando parciales. Hay mucho más por hacer y
hay mucho más que aprender. Pero los pasos del bebé y la práctica es lo que vamos a
llegar en verde. Entonces en este punto lo que
vamos a estar haciendo en nuestro repositorio de
GitHub, Oliver cambia todas
nuestras migraciones y
entidades y todos
los cambios que hemos hecho con la
base de datos o scripts. No se va a
sumar todo a nuestro repositorio. Acabamos de poner en un buen mensaje que al menos nos da sinopsis
de cuáles son los cambios. Y luego vamos a
comprometernos todo y nos hundimos. Cuando eso se complete, podemos proceder
al siguiente módulo.
25. Configuración de repositorios de acceso: Muy bien chicos, bienvenidos de nuevo. Por lo que ahora queremos tipo de evaluar dónde
estamos en el proyecto. Establecemos algunas características
para poner, eso está bien. Pero en este momento sí necesitamos
asegurarnos de que
vamos a estar poniendo en algunos conceptos
fundacionales para que cuando extendemos
nuestra aplicación, no hagamos tanto daño como tenemos el potencial de hacer si no
hacemos bien la
fundación. Quiero enfocarme ahora mismo en nuestro uso del B2B es contextos
directamente en nuestras páginas? No, sí, funciona. Y fue diseñado
por Microsoft, por el equipo Entity Framework
Core para permitir inyección
directa del
contexto en la página. Y eso sería en lo que
llamamos monitor de esculpir, significa para la
vida útil de una solicitud, durante toda la vida útil
de este código que se ejecuta en obtener su instancia de
contexto única. Muy bien, así que cada
vez que llega a esta página, se
obtiene una nueva instancia
y puede hacer su trabajo y luego desaparece. Artistas automáticos,
abre una conexión, hace la obra y
estrecha conexión. Recuerda que
los costos de la base de datos son caros, por lo que querían
asegurarse de que eres lo más
eficiente sobre una base de datos
llamada como sea posible. Y sí, han hecho
un trabajo maravilloso de ello. El asunto sin embargo,
es que a veces te darías cuenta de que
empiezas a repetir consultas. Entonces, por ejemplo, cuando tenemos que hacer esto,
déjalo caer en éste, tenemos que conseguir modelos mixtos
y colores de autos más bien. Si tenemos que conseguir los mics en más de una página es áspero
para repetir esta línea de código. Entonces sí, la repetición sucederá. Pero una vez más, ¿cuál es su tolerancia al riesgo o
posee esta repetición? Porque tenemos que conseguir esta lista
selecta dentro de la, ésta para los autos. También tenemos que
hacerlo por un auto modelos. Y estamos consiguiendo los modelos, ya sea que estemos
creando nuestra edición, sí
tenemos que ir y yo
esa misma llamada de consulta. Algo podría cambiar. ¿ Y si tuviéramos mix? Teníamos algunos de ellos
que no somos demasiado activos o algunos
criterios propios, cuáles queremos. Entonces podría correr el riesgo
de tener que mantener. Si algo cambia
con la forma que obtienes la mezcla
de la base de datos, vas a tener que cumplir con
más de una pulgada clave en más de una grata. Y si olvidas
una de estas cosas, entonces podrías correr el riesgo de no mantenerte en aplicación tan fácilmente como
podría haber sido mantenido. Hay una serie de cosas que fue
que estoy recibiendo que realmente es la
razón por la que la gente construye lo que llaman rapero
o un repositorio alrededor las operaciones de base de datos
que puedes tener 1 de referencia para
operaciones generales. Y puedes tener unos
específicos por mesa. Pero entonces sigue siendo 1 de
mantenimiento, 1 de contacto. Por lo que es más fácil de
mantener a largo plazo. Entonces para empezar esta actividad, configurar repositorio
es lo que vamos a hacer en nuestra solución es agregar otro archivo en
otros proyectos u otros, y va a
ser una biblioteca de clases. Tengo las mías en mis
plantillas recientes donde siempre puedes buscar plantillas y queremos
una biblioteca de clases C-Sharp. Haces clic en ese clic en Siguiente, y luego lo vamos
a estar llamando carbo King up dot repositorios. Entonces pegué a Next y
queremos que sea, podemos dejarlo como a.net cinco, eso está bien. Y crear. Una vez que tengamos este nuevo proyecto, podemos empezar a diseccionarlo
configurando algunas carpetas nuevas. Acabo de borrar el
archivo predeterminado que venía con él. Y la primera carpeta
va a ser contratos. Y el otro
sería Repositorio. Pausa los tories. Técnicamente hablando, lo que
queremos hacer aquí es seguir el concepto de segregación de
interfaz. Ese es el yo en sólido. Sigo hablando de sólido. Es un acrónimo con
viejo diciéndote todas las letras que
las he estado
rompiendo no lo hacen. Y cada vez que estamos
implementando uno de ellos, sí
te apunto hacia la derecha. Entonces hemos mirado la
separación de preocupaciones,
que es la S. Hemos mirado la
inyección de dependencia, que es la D, ninguna parte mirando al ojo,
que es la segregación de interfaz. Entonces por eso tenemos contratos
y tenemos repositorios. El concepto de
contrato de proveedor es que eres, estás firmando un
contrato para hacer algún trabajo. Aún no has hecho el trabajo. No obstante, el contrato es
esa declaración de que
vas a estar
haciendo el trabajo y esto es lo que
vas a estar haciendo. En ese punto, vamos a
llamar a esas interfaces porque la interfaz tiene las
declaraciones de lo que es posible, esa será la redacción
en el contrato. Entonces el repositorio real, o lo que llamaremos la
implementación, heredará. El contrato o la interfaz
y ser el trabajo real. Por lo que habrías
firmado el contrato. El contrato es un dictado
de lo que vas a hacer. Pero luego más tarde lo
estás haciendo y lo
estás haciendo por la
guía del contrato. Entonces esa es una especie de esperanza
que la analogía tuviera sentido para ti, pero
te verás exactamente a lo que me refiero ya que esto
llega a buen término. Primero empecemos con la creación de una interfaz en
esta carpeta Contracts. Y entonces vamos a llamar,
va a ser lo que
estoy usando la clase aquí, pero realmente
sólo vamos a
llamarlo yo repositorios genéricos. Así que nombrar convención sabio, cada vez que tenga una interfaz, generalmente se pone en un capital I y luego lo que
sea que se va a llamar, Viendo la IA un repositorio genérico. Y esto va a
ser una interfaz pública,
no una interfaz pública de clase. Este repositorio genérico
va a tener las funciones base que cada tabla de base de
datos
dondequiera que lleve a cabo. Hemos visto que podemos
agregar, eliminar, eliminar, editar
y actualizar, básicamente usando o
repositorio o usando el contexto de la base de datos. Entonces esas son las mismas operaciones que debemos permitir nuestro repositorio
genérico eucariota, excepto que vamos a estar escribiendo el código una vez que fui
al complejo contable genérico es que nosotros
lo estás escribiendo para que pueda suceder contra cualquier
mesa que se pase. Por lo que ahora vamos a
entrar en lo que
llamaremos genéricos en c-sharp. Para hacer algo genérico, lo que haces es usar
ese tipo de corchetes. Entonces esos son los corchetes angulares o el mayor que y distanciamiento. Y luego dentro
de esos paréntesis vas a
darle alguna ficha. Así que sólo lo estoy llamando
, por favor síguelo. Por lo que este sería tu
genérico Tolkien. Hablar generalmente usando
personas usadas como t o t modelo o entidad T, alcohol, las entidades T. Entonces el TI simplemente
significa que es un genérico. ¿ Qué es genérico? Cuál
es el tipo genérico que
espero es algo
de tipo entidad. Entonces veré una
entidad donde t he estado diciendo
dame el
repositorio genérico y es relativo a algún genérico
llamado la entidad. Y luego fui a especificar
dónde está la entidad T. Podría decir clase, podría
decir int, sea cual sea el tipo de datos
que especifique aquí. Básicamente se está diciendo que
esto es genérico en la
medida en que coincide con este
tipo de datos que estoy buscando. Si digo clase, eso significa equidad literalmente
pasar cualquier clase en que no necesariamente es
lo que quiero hacer. En lugar de decir clase, veré objeto de dominio base. O lo es, recuerda
solo por camiones. Recuerda que tenemos más bien
la entidad base. Lo siento, dije objeto. Debe basarse en una entidad. Ahí vamos. Déjame una entidad. Toda entidad que
se encuentra en nuestra base de datos debe
por lo menos ser la entidad de
dominio de la bestia. De esa manera. Nos aseguramos de que
siempre vamos a estar consiguiendo algo que
en realidad sea una entidad de base de datos. No quiero ninguna otra clase a menos que sea una base de datos entidades. Entonces eso es lo que estoy
especificando aquí. Líneas rojas porque
no tengo ninguna referencia
a este proyecto. Entonces, ¿recuerdas cuando estamos
sentados con Bridget, dónde agregar una referencia
al proyecto de datos? Bueno, hay
repositorios institucionales los cuales van a tener una dependencia
del proyecto de datos. Por lo que necesito añadir esa referencia. Simplemente puedo agregar
referencia y se
agregará la declaración de uso
para mí y todo. Y entonces esa
línea roja desaparece. Muy bien, luce bien. A continuación, queremos tener los métodos que
sabemos que vamos a necesitar. Una vez más, esta es la
interfaz o simplemente el contrato. Entonces esto es sólo una declaración
de lo que es posible. No es el código real. El primero que
vamos a tener es que
sólo vamos a estar usando
mis terminologías asíncronas. Entonces es una tarea que
estará devolviendo una lista. Fui a llamarlo
éste, conseguir todo. Queremos conseguir todo en la base de datos que vemos, conseguir todo. No hay problema. No creo que tenga que hacer
nada más con éste. Simplemente dejémoslo en
eso si necesitamos
ampliarlo más tarde y
fin de semana lo hizo en absoluto, lo siento, esto debería estar devolviendo
una lista de entidad tipo T. Entonces lo que sea, sea lo que sea, lo
pasamos como un objeto de
dominio base a la entidad T, entonces este método devolverá
dinámicamente lo que T NTT
esté obteniendo todo. Entonces el siguiente básico
será conseguir,
uno, va a querer un registro
fue a decir int id Así que queremos llegar a
un registro por ID. Y luego voy a
seguir adelante y llenar el resto de ellos para que
puedas hacer una pausa, replicar eso. Pero en última instancia solo
queremos agregar otra tarea con devolver un booleano para decir que el registro existe y
pasamos en el ID. Queremos que algo
inserte entidad T, algo que eliminar
cuando se obtiene el ID. Y no lo
sé, no quiero
actualizar cuando tenga entidad D. Esos son los
métodos generales que
esperamos llevar a cabo contra
cada mesa. Una vez más, este es el
genérico. Próximo paso. Necesitamos configurar una
clase que vaya a implementar este comportamiento genérico. Dentro de la carpeta de
repositorios. Voy a agregar una
nueva clase esta vez, y se va a
llamar repositorio genérico. Entonces adelante y agrega eso. Y luego este repositorio genérico
de clase pública. Y tiene que ser genérico también. Entonces es relativo a In NTT. Lo pone en arte que
corchetes entidad y hereda del repositorio
genérico. Muy bien, así
que recuerda que una vez más tenemos el contrato y luego
tenemos la implementación. Firmamos que este es el trabajo que
vamos a estar haciendo. No se inicia ningún trabajo. Esta es la herencia
donde estamos viendo, vale. Sea lo que sea que el
contrato dicho tendría que hacer. Necesito seguir adelante y hacerlo. La herencia I repositorio
genérico. Y luego solo seguimos adelante y
controlamos punto a los usos. Vamos a tener que por
supuesto especificar que esto es genérico a t entidad donde t y t es de tipo dominio
BCE no es decir entidad. Similar a lo que
acabamos de
hacer excepto solo un poco más de ley de
matices porque se
ven al de colon es la herencia inicial
y delta uno es sólo la misma decoración
que tenemos que hacer sólo para asegurarse de que
todo el mundo lo sepa. Básicamente significa entidad es lo que
debe representar la entidad. Entonces la razón por la que podemos usar base, permítanme una entidad
una vez más
es que está siendo utilizada por
todas las entidades. Así que técnicamente,
mientras que cada entidad su propio tipo de datos en su base, realmente
son el mismo tipo de datos en forma de entidades de
dominio de abejas. Entonces esto es como un identificador
único para cualquier cosa que
sea una entidad aquí, añada una nueva clase mañana
que sea una entidad. Simplemente conviértalo en la entidad
heredada de b asumiendo, y automáticamente todos
comparten la misma identidad. Ahora esta línea roja aquí va a ser porque está diciendo que
necesito implementar. Entonces, una vez
que tengas una interfaz que tiene métodos ahí, necesitas implementar. Por lo que firma el contrato y todo lo que necesitas para empezar a
hacer el trabajo. Sólo tengo que hacer Puntos de control. Y dice implementar interfaz, presione Enter y mire eso. Acaba de generar
cada método stub relativo a las
declaraciones y hecho aquí. Si hago algún cambio
en lugar del contrato, entonces necesito
asegurarme de que cumpla con el cambio relativo aquí
en la implementación. Antes de empezar con
nuestras implementaciones, lo que tenemos que hacer es inyectar. Entonces si necesito una conexión
a la base de datos, necesito hacer algo
parecido a lo que habíamos estado haciendo en nuestras páginas donde nos la inyección puerta de nuestro contexto y todo
eso se generó para nosotros. Explicé lo que estaba haciendo, pero esta vez se generó
para nosotros. No hay izquierda y
derecha genéricos para decirnos a nosotros mismos. Así que empecemos
en ese nulo. Para empezar, solo puedes escribir
un CT O presionar Tab dos veces. Usted consigue su camino, usted llama al constructor. Entonces necesito inyectar en una copia de mi auto reservando hasta el contexto DB. Sólo voy a decir que
reserva auto arriba el contexto DB. Y esto está dentro del
parámetro fuera del constructor. Sólo voy a
llamarlo contexto. Muy bien, estamos acostumbrados
a la palabra contexto. No cambiaré el nombre aquí. Entonces acabo de hacer Conducto de control. Y puedo ver crea un campo de asignación contextos
aunque cuando hago eso, ves que se ve de la misma manera
que se veía en nuestras páginas. De hecho legible privado,
es solo que puedes quitarte el exceso, sea lo que sea. De acuerdo, si estás usando el vapor de Visual
Studio y las necesidades están de acuerdo, deja que eso significa que en realidad es opcional porque ya tienes
el espacio de nombres. Eso es todo lo que realmente está sucediendo allí, pero es
lo mismo, carbocación, un contexto, contexto y luego
lo inicializa. Ahora nota que utiliza
un subrayado aquí, pero no nos dio un
subrayado en general. Y así personalmente, prefiero usar el subrayado
porque me gusta
ver los campos diferentes de las otras variables regulares o propiedades a través de
eso en la partitura, tiendo a usar subrayados. Yo lo reemplazaré aquí. Punto de control. Y hagamos el refactorizador de
Visual Studio a cualquier otro lugar
es igual a ser utilizado. Esa es la única razón por la que
verás el subrayado y nazis en la plaza de
los de un mes para ti. No tienes que hacer esa es mi convicción personal realmente. Echemos un vistazo a
otra línea donde tenemos que inicializar
la DB sit. Tan privado, de sólo lectura. Así que los campos de solo lectura, disruptivos como el nombre es, un campo de solo lectura significa que
una vez que establezcas algo como no lideramos solo se
puede establecer dentro del constructor
y en ningún otro lugar. Una vez que se llama a este archivo, se llama a
discutir, se llama al
constructor. Estos campos de solo lectura se
inicializarán y luego no se pueden
cambiar después. Entonces si escribes código, lo cambias
inadvertidamente, solo te daría
un error durante el tiempo de ejecución que T está tratando de hacer
algo que es ilegal. Es posible que el compilador no te lo diga, pero la aplicación definitivamente
se
estrellará porque no
es posible. Hacemos un
DB privado de solo lectura sentarse en relación con la entidad t0. Entonces recuerda que la entidad D representa
la entidad para la clase, para la base de datos más bien, y solo vamos
a llamar a eso un dB. Por lo que el conducto de control. Y estoy agregando la declaración de
uso para problema
Entity Framework Core. Y luego en lugar
del constructor, el único lugar en el que
puedo establecer el valor, voy a inicializar
esto a C. B B es igual al punto de contexto. Y podemos llamar a este
método llamado sit. Sit crea un conjunto de base de datos relativo
a la entidad t0, no hay problema. Set. Y T entidad. Estoy recuperando la
base, la conexión. Entonces esta es la conexión a todo
el contexto de la base de datos. Y luego dB sería la
conexión a la tabla específica relativa a cualquier tabla que esté solicitando una acción en contra. Eso. Así es como todo se conecta. Así que empecemos a implementar estos y
esto no tomará demasiado tiempo porque generalmente estamos
familiarizados con el código que
hay que llevar o
rasgar en la eliminación. Veamos la
operación de eliminación que
habríamos implementado en nuestras páginas. Recuerda que tenemos
algunas páginas de borrar. Alguna vez podrías
moverlos si quisieras. Pero habíamos hecho nuestra propia
eliminación en el índice de todos modos. ¿ Y qué hizo?
En primer lugar, lo telefoneó y luego se aseguró de que no fuera nulo y luego lo eliminó. Eso es lo que el delete
generalmente tiene que hacer una prueba para encontrar el registro y luego dice que
elimine el registro. Entonces es lo mismo
en esta implementación. En primer lugar, diremos var
entidad es igual a, podemos ver punto bajo DB. Ahora db dot significa la tabla
exacta en la que estoy. Y usted nota que tenemos todos
los métodos disponibles para nosotros. Entonces diremos encontrar
y solo usaremos un Para asíncrono donde
configuran esto como nuestra tarea. No hay problema. Entonces encuentra asíncrono por ID. Entonces decimos subrayado DB
dot, quitamos la entidad. Está bien, se ve bien. Entonces en este punto
se está quejando porque encontrar asíncrono, no
soy una espera. Y en un momento nuestros pesos, va a empezar a
quejarse de nuevo. Déjame poner eso
ocurrió, por favor. Variable ese peso. Y va a
empezar a completarse de
nuevo debido a que el
método no es asíncrono segundo punto de Control de Enfermedades
y lo convierte en AC para mí. Eso es un hueso y unos pocos para ir. El siguiente arriba es existe. Lo que existe parecía, creo que en la edición
teníamos que hacer algo con un existe donde dicho retorno contextos salpican la
tabla con esa condición. No hay problema. Así que en realidad solo voy a copiar este código y
podemos cambiarlo para arriba solo para ver por qué se ve
ligeramente diferente. Entonces sí, vamos a volver. No estamos devolviendo el contexto
dot nada esta vez. En cambio estamos
devolviendo bajo DB porque eso
representa la salida, la tabla específica esta vez, lo que entonces significa que no
necesito esos modelos de
autos porque
realmente no lo sé en qué tabla estoy hasta que golpea esta implementación
e inicializa la BBC hizo el supuesto de
que se trata de contextos, no modelos de autos,
puede ser cualquier cosa. Entonces DB representará
que cualquier cosa. Pero entonces cualquiera sigue siendo el
método que necesito usar. De hecho, no
hay ningún asíncrono. Ahí vamos. Y luego
mira la condición. Cualquier aciando esto necesita
esperar y luego Controlar puntos para conocerlos a flote asíncrono, y todos están contentos. Muy bien,
reuniéndose agradable y decir Ve cómo
se ve muy parecido el código. Pero entonces una vez más,
es genérico porque aquí definitivamente está
buscando modelos de autos. Y tal vez no necesariamente
sepamos con qué entidad a dónde
se trata en su momento. Continuemos con
nuestra implementación para que podamos hacer y llegar a ser
relativamente simples. Todo lo que tenemos que hacer aquí es decir
var entidad es igual a o, se encuentra un fregadero. Lo que estoy recibiendo
algunos errores aquí. Uno, porque esto es
un error mortal. Esto no debería estar regresando, al
menos conseguir que todos devuelvan la lista te hace que solo
devuelvas uno que no es problema. Tener que cumplir con el cambio
tanto en la interfaz como en
la implementación. Así que get no debería
tener lista ahí, solo
debería devolver la
tarea T entidad. Muy bien. Entonces solo podemos
modificar eso aquí. Porque si subimos, vemos que esta
quejándose estacional porque las dos paradas del método no se
parecen cuando hice
esa corrección, ya no
es quejarse. Muy bien, siguiente arriba, control punto para hacer
el método asíncrono. Y entonces todo el mundo
debería ser feliz. Pero esto está diciendo que no
todos los caminos devuelven un valor. Por lo que en realidad podría simplemente cambiar
la frase, digamos retorno. Sí, ahí vamos. A continuación, tenemos algo
parecido para que consiga todo. Así que sólo voy a decir volver. En lugar de db.find a sink, sería db dot para
enumerar una sincronización, una vez más, asíncrona, pero las inclusiones,
inserción y actualización de
McCoy tendrán código similar. Insertar, solo estamos diciendo dB en asíncrono y estamos agregando
la entidad que se
pasará y
viendo así usa tu oh, espera, hice el método
Async y aire vacío. No están devolviendo
nada como sólo una tarea. Esta es nula. Por lo que no hay métodos asincrónicos de
actualización real. Y eso es por toda
la concurrencia o potencial concurrencia
que habíamos discutido en los primeros días. Porque no quieres arriesgarte
a actualizar las operaciones
en el mismo registro, en el mismo hilo o en
diferentes subprocesos más bien. Por lo que la programación asíncrona
creará un hilo diferente. Es por eso que puedes tener
múltiples operaciones de anuncios, múltiples operaciones
de recuperación al suceder simultáneamente, pero luego una actualización es un poco
delete es un poco arriesgada. Notarías que estas
dos no son necesariamente películas
asíncronas,
no las asíncronas. Y no hay nada
asíncrono, el
doble del apego aquí. Esas tienen que suceder uno
a la vez, garantizar la consistencia. Por lo que ahora tenemos todo nuestro repositorio,
repositorio genérico creado. Sólo voy a hacer una
construcción Control Shift y B solo para asegurarme de que
todo esté construyendo correctamente. Ahí vamos. No, no
voy a ir más allá. Creo que esas son mucha
inflamación para absorber. Por lo que solo puedes revisar todo
y ver cómo todos estos puntos se conectan entre
sí y cómo
todo está empatado. Lo último que
voy a hacer, sin embargo, es agregar una referencia para nuestro nuevo proyecto a nuestro proyecto de búsqueda de
carburadores. Eso va a
tener que reorganizar las dependencias
porque voy a agregar un proyecto o
herramienta de un amigo, repositorios uno. ¿ De acuerdo? Y entonces lo que pasa es que los repositorios se han referenciado
a los proyectos de datos. Entonces si elimino la
referencia de datos y luego hago una compilación, entonces vemos que
seguirá teniendo éxito. Entonces en este punto, no
necesitamos una referencia directa de nuestra aplicación web a nuestro proyecto de entidad
porque está hablando con
los repositorios. Los repositorios tendrán esa
herramienta de referencia director, esos datos. Y luego el proyecto de datos tiene las referencias de terceros
a Entity Framework, Core y tal y así sucesivamente. Por lo que la jerarquía
sigue intacta. Si miras,
verás que ninguna de nuestras cuotas está realmente rota. Pero en última instancia lo
que queremos hacer es no tener este contexto DB directamente
inyectado en nuestras páginas. Cuando volvamos
vamos a estar reflejando nuestro código de tal manera que será uno ni un barco y registrar el repositorio que
hemos creado. Y luego intercambiaremos el
código para usar el repositorio. Y luego para
operaciones más complejas que las que requieren incluyen en algunos
de los campos y así sucesivamente. Vamos a mirar todo. Necesitamos modificar nuestro repositorio en nuestro código para facilitar esas situaciones
especializadas.
26. Agrega el primer de repositorio: Chicos, bienvenidos de vuelta. Entonces lo que acabamos de
lograr fue configurar un pequeño
envoltorio alrededor del contexto de la
base de datos de revisión y
eliminar algunas de las referencias directas
antes entre nuestra aplicación web
y la base de datos. Entonces hemos puesto en este oído medio, que algunas personas
describirían como la capa lógica
empresarial. Porque si tenemos
algo especial que hacer, cualquier operación especial, no
querría
escribir el código innecesariamente
en la aplicación web. Solo queríamos llamar a
un método y luego dejar que ese método cumpla con
las decisiones y haga cualquier cosa que
deba hacerse que sea de naturaleza elegante por falta
de un poco de expresión. Entonces eso sería lo realmente representa
nuestra capa de repositorio. Saben, este Lear puede crecer. Sólo hemos obstruido muchas
de las operaciones
en dos expedientes en este momento. Pero hay potencial de crecimiento y
verá que tendrá que extenderse en base
a algunas de las operaciones que tenemos que
realizar
para que los repositorios
estén disponibles para inyección de dependencia en
nuestra aplicación web. Al igual que lo que podemos
hacer con el contexto DB. Lo que tenemos que hacer
es saltar hacia adelante o startup y registrarlos
como servicios de esculpir. Entonces en los servicios de configuración, recuerda que lo habíamos
modificado para agregar el contexto DB que tiene que quedarse. Pero lo que podemos hacer
es decir servicios. Y podemos ver sumar
scoped entre paréntesis. Voy a decir tipo de repositorio
genérico
con corchetes vacíos. Entonces le estoy haciendo saber
que donde ves la interfaz, se implementa por el repositorio genérico y
también con los corchetes apretados. Por lo que podrías ver código
similar escrito manera
diferente donde
realmente dices agregar ámbito, tipo de soporte
abierto y
su implementación. Pero debido a que estamos
usando genéricos, así es como se tiene que hacer. Y es sólo otra forma. Es básicamente el
mismo tipo de código. Más tarde cuando tengamos repositorios
específicos y verás el otro estilo
de escribir esta línea. Pero por ahora, solo agregamos scoped. Por lo que en realidad hay algunos
tipos de modelos de inyección. Modelos de inyección que significa servicios de
agujeros
se inyectan en su
vida emoción a lo que llamamos nuestra
solicitud o garganta, el tiempo de ejecución de la aplicación. Para el contexto, hemos sumado scoped. Por lo que tuvimos que sumar
scoped en la escuela. Significa que para tu llevar a cabo una operación hasta que termines esa operación, usarás una
instancia de esta, sea cual sea lo que nos
estamos dando. En este caso, se
utiliza una instancia
del repositorio genérico
durante el tiempo que esté realizando una
operación o un conjunto de operaciones en una página. Transitorio significa que cada
operación con la que vas a empezar siempre te
dará una nueva. Por lo que añadir transitorio está bien si
lo estás haciendo con servicio de escolta. Debido a que el contexto DB tiene alcance y el
repositorio genérico se basa en el ámbito, podríamos
encontrar fácilmente el repositorio ya sea transitorio o esculpir. No hay problema. El otro es singleton. Singleton, lo
que significa que voy a ser una instancia para
toda la aplicación. Hay momentos en los que
querrías que tal vez como con un archivo de configuración, algo que nunca ha cambiado. Nunca esperaba ser dinámico. Lo haces una sola vez. No tienes
que cambiar que cada vez que pasa
algo
o cada vez que el doctorado y el GCF para obtener una
nueva instancia de la misma. Eso es más para nuestras operaciones de
base y ciertos otros tipos de servicios como un servicio de correo electrónico, definitivamente
querrías
que eso sea transitorio porque si se
necesitan enviar varios correos electrónicos una vez, quieres múltiples objetos
o incienso, él está fuera de eso. Y deben cerrar en
cuanto estén terminados. Se puede mezclar y combinar. No necesariamente
tienes que
recordarlas a todas y simplemente averiguar cuál todo el
tiempo soy negro. Pero ciertos principios se
pueden utilizar para averiguar cuál es el mejor
para qué tipo de servicio. Y esta base de datos servicios
definitivamente mejor como Sculpt. Si quisieras una
pista, si pasas el cursor sobre el contexto de agregar DB, en realidad
verías que te dice que tiene un alcance predeterminado. Cualquier cosa que
dependa del contexto de la base de datos, solo hazlo esculpir yo,
deberías estar bien. Ahora que hemos incluido
nuestro repositorio genérico, veamos cómo funciona. Entonces voy a saltar
a uno que sea muy sencillo. Empecemos con micrófonos. Yo en nuestra Create Page four mix, lo que voy a
hacer es en lugar de inyectar el
contexto DB directamente en, voy a cambiar la sal, así que solo voy a eliminar el contexto DB de
la inyección. Y voy a decir que dame un repositorio genérico de para
incluir referencias faltantes. Y puedo ver herramienta relativa. Sé que estoy en mezcla, tan relativa a la clase media. Entonces puedo llamarlo así. Acabo de pensarlo repositorio
y luego Controlar puntos. Que se inicialice
un campo creado. Entonces puedo eliminar
las referencias al contexto y repositorio
en el repositorio de partituras, simplemente
renombraron eso. No, se renombra en ninguna parte
usando repositorio en lugar del contexto. Y como era de esperar, tenemos
unas flechas que aparecen bien. No, esta fue una operación de creación. Entonces eso significa en lugar de ver context dot mix dot agrégame, puedo saber ver
repositorio dot insert. Y luego fue asíncrono
después de nuestro peso. Esto es muy importante
que no implementamos un Guardar Cambios en
nuestro repositorio. Entonces recuerda que cada vez que
aumentamos los datos tenemos que llamar
a guardar cambios. Si saltamos por encima y
solo puedo hacer Control F12 para saltar a la
implementación del método. Observe que no hay
cambios de guardado sucediendo
en ninguna parte, ¿verdad? Entonces estamos actualizando
donde insertando, estamos eliminando nuestro no ahorro. Entonces levantamos ese onenote. No hay problema. Por eso es bueno
coger estas cosas de. No. Sólo voy a seguir adelante
y voy a hacer ésta una tarea que
devuelva un int. Y va a
ser guardar cambios. Y eso lo hizo
porque si los cambios por defecto generalmente devuelve
un entero de todos modos, así que solo estoy representando eso. Bueno, esto es como
nuestra función superior. Entonces si salto a
la implementación, se quejará, Hey, método
Union Avenue, por favor
implemente control dot enter. No es implementado. Y entonces todo lo que realmente tenemos que
hacer es devolver contexto. Por lo que hemos subrayado contextos. Pensamiento Guardar Cambios es hundir. Es asíncrono, así que tengo que
esperar, por supuesto, Control dots MC método Asíncrono y eliminar el
exceso de espacio. Ahí vamos. No, podemos ver si
GNG no es un problema. Lo que podemos hacer es en lugar de llamar a los cambios de Guardar
cada vez que llamo, hacemos el inserto aquí
y luego tenemos que
llamar al Guardar Cambios
en una línea separada. Sabemos que estos métodos
necesitan para guardar los cambios. Es bastante fácil para mí ver
solo después del inserto,
después, si agregas, luego adelante y llama a tu método
local Save Changes. Ese es nuestro peso. Esto reducirá el número de veces que yo, verás los
cambios de Guardar por toda la aplicación porque
sabemos que quiere hacer un inserto, los tintes necesitan ser guardados a través todo aquí. No hay problema. Y entonces todo estaría
funcionando en el mismo contexto. Entonces, no importa cuántas
operaciones hagas usando la instancia del
repositorio WAN, siempre
guardará
los cambios al final de la d. Así que vamos a esperar, ver si g y g, Así que la inserción, y lo de guardar siempre
los cambios con la actualización. Y luego mira esto,
uh, guardaríamos los cambios
con la actualización,
um, porque
no es asíncrono, así que no hay problema que podamos
reflexionar a medida que avanzamos. Y el delete tampoco
es asíncrono, pero éste fue asíncrono porque hizo
algo asíncrono. Por lo que ahora podemos sacar
la actualización de ser vacío Puntos de control. Podemos hacer el método Asíncrono. Pero en lugar de hacer eso, lo que fui a hacer es modificar la interfaz y
convertirla en una tarea. Simplemente dejar eliminar es una tarea, entonces eso
lo haría más consistente. Por lo que sólo podemos ver la tarea
asíncrona Actualización. Y entonces todo el mundo está feliz
conociendo nuestros crea. No necesitamos esta línea
porque una vez que hagamos el inserto, sabemos que la inserción y el ahorro de
cambios ocurrirá. Eso es todo en una línea. Si necesitamos hacer un cambio
a un conjunto se hacen insertos. Tenemos 1 de referencia. Si hubiera múltiples
lugares en la aplicación, que hacer este
tipo de operación. Y quería que en todas partes
fueran consistentes. En lugar de hacer
cambios de código en todos los lugares, tenemos 1 control de 121 de referencia a
mí, esos cambios. Alguien que te muestre
algo sin embargo. Y si Por cada vez que
necesitaba salvar el cambio, recuerda que habíamos añadido hechos creados y
déjame volver a la bestia. Quiero decir, entidad que habíamos
dicho hecho creado. ¿ Recuerdas eso? No. No. No. No hemos hecho
ninguna modificación para facilitar lo creativo ya que yo mismo lo he estado
quitando de la interfaz porque lo
vieron como un obstáculo. Porque realmente y
verdaderamente los usuarios
no deberían poder verlo
ni interactuar con él. Es realmente para nuestro sistema
interno. No obstante, quiero
asegurarme de que cada vez que grabo
estos siendo creados, desvalorizar, ¿está bien? Volviendo a lo que dije, en lugar de hacerlo
en múltiples lugares y por todo lo que puedo conocer. Todo sucedió
en lugar de repositorio NIH. Entonces me da un poco más de
control sobre las operaciones. Dicho esto, modificemos nuestro método Save Changes
para agregar más datos, manipular los datos
o lo que sea que
queramos hacer antes. En realidad va al contexto de la
base de datos y guarda. Aquí, podemos conseguir que las entradas
que son un barco se salven del contexto
diciendo sólo para pagarlo. Entonces no sé cuántas cosas se van a salvar
que este punto porque podríamos haber hecho múltiples operaciones,
sea cual sea. Así que sólo voy a
guardar para cada entrada en el punto contextual. Y luego está esta cosa
llamada camionero de cambio. Por lo que esto en
realidad es así
Entity Framework es en realidad camiones que cuando te
dieron una entidad, en realidad está viendo ¿
modificaste esta entidad? ¿ Ha cambiado algo sobre
esta entidad? Por eso, ¿no
haríamos la actualización? Estamos viendo adjuntar
y luego cambiar los estados para modificarlo para
que Entity Framework sepa
que esto fue modificado. Entonces cuando veas si
los cambios aquí golpean, sabrá automáticamente
qué tipo de declaración
generar con base en el
estado de la entidad. Entonces T instructor es lo que se está
utilizando como ese registro
para ver este cambio. Este no
hizo éste éste no cambió. Instructor es puedo decir consígueme las entradas y luego esta es una colección para que
pueda usar corchetes no, para analizarlos en
algo específico. Entonces cuando digo
algo específico, puedo decir que me den
todas las entradas. Ese es nuestro auto. Consígueme todas las
entradas de modelo de auto, pero no sé qué se está
salvando. Esto es genérico. Entonces en cambio voy a
decir cualquier cosa que se esté guardando que sea de
tipo entidad de dominio base, que podría ser cualquiera de
nuestras entidades que tengamos. Ya ves, solo usar ese
poquito de herencia nos
permite hacer maravillosas cosas
genéricas, ¿verdad? Un poco de código para servir muchas mesas y
simplemente ser flexible. Estoy diciendo consígueme cada entrada que esté en la estructura de la cadena que a menudo es mejor
para mí una entidad. Y entonces puedo extender
esto para decir que estamos estamos sentados
actualizados creados. Sólo quiero los que
tienen el estado de entidad como contextos
modificados estados de entrada. Puedo verlo Ahí es donde Q lambda expresión Q punto
estado es equivalente. Y luego las entidades señalan que nos
es dado por
Entity Framework Core. Y aquí están todos los estados
potenciales sin cambios, agregados, el toque
modificado, eliminado. Muy bien, así que quiero que
cuando se esté agregando, quiero todas las entradas que
cuando se están agregando, pueda ver entrada dot Entidad. Entidad aquí es maravillosa. El genérico y los organismos basados
en esta entidad de dominio. Dot que creó es
igual a punto de tiempo. Entonces todo se está
uniendo. Entonces una vez que hago
eso, me permite no
necesitar sentarme y ambos
estamos sentados
esa fecha creada en cada disco
o cada vez. Algo es capaz de ser lo suficientemente
creativo como para ir a cada crear código Bij para ver antes de
enviarlo a través de McDonald creado
es igual a d tiempo no, y descendientes, y
sólo lo he hecho un lugar. Una vez que se crea algo,
esto sucederá. Entonces se guardarán los cambios. Y se puede extender
esto a la
de ambas cosas porque podríamos
haber tenido una fecha modificada. Por lo que se podría decir fácilmente, Tráeme donde
se agregue o modifique el estado. Si se
agrega el estado, el nuevo conjunto, esto si es
modificarlo usted dijo que no modificó, etcétera aún vuelan. Entonces solo te estoy mostrando que esto es maravillosamente flexible. Entonces en este punto
sólo voy a hacer una construcción rápida y
vamos a saltar y probar nuestra mezcla y
ver la diferencia, ¿verdad? No, Los únicos cambios que hemos
hecho es crear Pj. Eso está bien. Así Crear Nuevo. Y voy a decir
probar nuevo repositorio. Este no soy yo. Pero vamos a seguir adelante
y golpear Create art. Por lo que todavía hay obras. Veamos en la
base de datos y veamos qué vinieron los dioses se sientan
para el periodo de fecha. Y así perforando hacia abajo
a la base de datos y ya a ser la carbocación
clubbed arriba. En nuestra mesa de mezclas, el registro más reciente debería tener el deet y ahí vamos. Cada otro tenía
la fecha predeterminada, este problema en los datos del carrito, la marca de tiempo exacta de
cuándo fue creado. Eso fue lo fácil que
fue saber si
cambiamos toda la
cotización de crear y te voy a
desafiar a que hagas eso de
la misma manera que
modificamos aquí el modelo Create. Para mí, te voy
a desafiar
a ir y hacer lo
mismo por los colores, hacer lo mismo por los modelos de autos. Debería ser bastante fácil
hacer lo mismo para los autos. Sí, porque el CTO lo suficientemente
sencillo. Amigo que apoye todos
los crea y si
te sientes a la altura, adelante y haz
lo mismo por la edición. Porque es más o menos lo
mismo dondequiera que tuvieras contextos que la seguridad
depende del contexto, el amor hacer cosas. Aquí está ese mismo adjunto con las entidades estado modificado Cmd,
G, y G. Eso es todo lo que
hicimos en nuestro método de actualización. Dondequiera que tengas esos, intenta cambiarlos
por el código del repositorio. Entonces lo voy a hacer
y cuando volvamos
podremos comparar lo que se hizo.
27. Refactoring Páginas: Bienvenidos de vuelta chicos. Entonces, cuando
estuvimos aquí la última vez, tuvimos una asignación donde debíamos
completar otras páginas. Espero que lo hayas intentado
por tu cuenta. Y si te encuentras con
temas en el camino, que no sería sorprendente, no te sientas como si no estuvieras
haciendo el trabajo
correctamente o así sucesivamente. Hay ciertas
partes de ella que
necesitarán un poco más de
explicación que algunas. Pero en última instancia, espero que lo hayas
intentado y espero que entiendas lo que estamos
tratando de lograr aquí. Lo que voy a hacer es revisar
lo que hicimos la última vez. Y luego vamos
a caminar por cada uno de los cambios generales. Y hay algunos cambios que requieren un poco más de
código para ser escrito. Así que hagamos eso juntos. Empecemos con revisar lo que hicimos la última vez
que estamos lidiando con micrófonos y hemos modificado
la página Crear, ¿verdad? Entonces hicimos la inyección
del repositorio en nuestra
Crear página relativa a mí, eso es un repositorio genérico
relativo a mic. Entonces podríamos reemplazar todo
ese código elegante de conseguirlo y cambios de historia y densidad por
una línea de código. Sólo el inserto. Vamos a seguir adelante. Por lo que
configuré mi página de eliminación. Sabemos que no
necesitamos borrar bits. En realidad solo
voy a eliminar la página de eliminar ahí mismo. Y luego veamos
los detalles juntos. Entonces los detalles hacemos lo mismo, hacemos nuestra inyección. Por lo que reemplazamos la inyección de
contexto por la inyección genérica
del repositorio. Y luego donde habríamos estado haciendo el primero
o por defecto conseguir eso. Acabamos de reemplazar eso
con nuestro
repositorio de pesos dot obtener
ID dot volume. Si me estoy moviendo demasiado rápido o aún no lo
has hecho, siéntete libre de hacer una pausa y
replicar a medida que voy, pero por favor asegúrate de que estás internalizando las explicaciones
del código a medida que avanzo. Echemos un vistazo a la edición. Misma inyección. Estoy seguro de que empiezas a darse cuenta de nuestro tema común
a través del centro comercial. No, todo lo que tenemos que hacer es inyectar nuestro repositorio relativo a qué entidad donde un barco
utilizar en la página. Entonces para el on consigue esta línea básicamente él nosotros como los
detalles conseguimos la misma línea. No cambié ninguno de los trimestres
por defecto en los cheques. Todos ellos siguen
siendo necesarios. Solo estoy reemplazando
el código con respecto
al contexto luego en el post, lugar de cambiar el estado para modificarlo y
luego guardar los cambios, solo pongo la actualización ahí. Porque en la actualización, se va a seguir adelante y ver
si g y g es de todos modos. Entonces no tenemos que preocuparnos por
nada malo en eso. Todo lo que hacemos es cambiar eso para actualizar dentro de un try catch y todo debe
operar de la misma manera. Otra slash gestionar el cambio habría sido con los existentes. Existe no era asíncrono, solo
era privado bool make
existe y se obtiene el ID. Así que lo cambié para
decir, esperaré, repositorio que existe
con el ID que hizo del cargador de mitos
el asíncrono. Entonces, al usar el punto de control, se anexó automáticamente asíncrono al nombre del método. Ningún problema lo hizo
asíncrono, no hay problema. Entonces otra cosa que tendrías que hacer es asegurarte de que llames un peso en ese método. Llama a la parte superior aquí. Los nombres y todo
sería capaz de, quieres usar
el IntelliSense, pero solo tienes
que asegurarte de que pongas en esa línea. Esos cambios prácticamente
los mismos cambios
para las mismas páginas, para los colores porque
esas dos páginas o estas dos entidades no
tienen dependencias. Colores, lo mismo excepto que estamos inyectando nuestro repositorio
listo para tener que colorear. Y luego usamos la misma línea ahí para una
necesidad lateral la eliminación. Por lo que voy a quitar
eso para los detalles. Tenemos lo mismo. Donde acabamos de obtener los detalles
del color para la edición, tenemos la misma inyección
donde obtenemos el color. Y luego más tarde actualizamos el color cuando
sea necesario. El índice. Me salté el
índice para el mic, también índice
tanto para la Meca como para el color. Bastante simple. Participar o
inyectamos o repositorios. Lista será obtener todos. No hay problema. Creo que esto debería ser mezclado. Podría haber leído eso. Si no, entonces puedes seguir adelante. Hice ese cambio. Entonces eso es hace que te
consigas todo y luego ON delete, todo lo que tenemos que hacer
es llamar al delete. Si Record ID es igual a
saber que vamos a no telefonearnos. De lo contrario simplemente llamamos a la eliminación pasando
en el ID de registro. Eso es todo lo que hay a ella. Agradable y simple y consistente. Entonces mira, no quise decir que
esté escuchando los colores. No hay problema. Hagamos eso
juntos una vez más. Y literalmente
solo voy a copiar esta línea porque es
básicamente el mismo código. Y puedo reemplazar todo esto
con esa línea de código. Porque todo el mundo está siendo llamado repositorio y se puede
conseguir específico si lo desea. No digo que
tengas que llamarlo repositorio y todo el mundo
necesita tenerlo llamado repositorio. Es posible que desee obtener
específico y llamar este repositorio de color,
hacer repositorio, etcétera No hay problema. Pero al final del día,
el código base y
la forma en que se ve, la estructura siempre
va a ser consistente. Lo hemos hecho por los colores. Lo hemos hecho por
mí, no hace ningún problema. Echemos un vistazo a los modelos de autos. Y también un auto
modelos es un poco más complicado en que
tenemos que cargar datos iniciales. Por lo que ves hice algunos de los cambios y
dejé algunos desconocidos. Sólo piensa que él
es aquí es donde estabas. Y si no, entonces siéntete
libre una vez más también, pausa y replica lo
que ves en mi pantalla. Ya hemos reemplazado el código de inserción en el método post. Es repositorio insert
car model, bien, pero luego necesitamos
obtener la lista de mix, lo que significa que necesito un repositorio
que me pueda conseguir la mezcla. A pesar de que bajo repositorio
las cárceles es relativa al modelo de
automóvil no se mezcla. Aquí es donde
probablemente querrías conseguir específico con el nombre
del repositorio. Entonces en este caso, me gustaría llamar a este repositorio de modelos de
autos y acabaré de cambiar el nombre,
y simplemente copiaré, pegaré tres, usaré este nombre y renombraré
en consecuencia sono. Todo el mundo sabe que
se trata de un repositorio de modelos de automóviles. Por lo que el repositorio modelo de coche
inserte eso. Necesito un repositorio
que sea relativo a la mezcla. No hay problema. Puedo ir fácilmente aquí. Sólo voy a copiar este bit, que dices que yo
repositorio genérico relativo a mí. Y fui a llamar a este repositorio
de mezcla. Aquí es donde el nombrarlo
específicamente entra en juego y luego Puntos de control le
permiten crear un campo
asignado. Y ocurre la inyección. Por supuesto que usamos nuestro subrayado. Y después de hacer todo eso, no, solo
puedo saltar
aquí abajo y verme x es igual a una nueva lista de selección. Espera el repositorio mix
dot llegar a todos. Mira eso. Todo el mundo está feliz. Eso es todo. Para que puedas tener
más de un repositorios en la misma página. Por lo que tengo un repositorio que
habla con la mesa modelo de autos. Y tengo repositorio
hablando para hacer
supongo que lo que ambos son
la misma base de código. Eso es realmente todo lo que necesitaba
hacer para la creación. Por lo que tengo que repetir esa
hazaña para el editor. Por supuesto que sabemos
lo que hacemos es crear dos básicamente después de
replicar con edit. Sólo voy a copiar y
pegar como casi nunca ******. Fui a hacer esto aún más rapido. Solo voy a
tomar todo esto, apareció y reemplazar
todo eso en el Editar,
y luego simplemente cambiar el nombre campo constructor
o
el nombre del constructor. Mi repositorio, ¿qué
fueron los repositorios? No hay repositorio modelo de coche. Y luego
repositorio de automóviles de motor de nuevo. Y entonces este sería nuestro repositorio mixto de
peso. Dot consigue todo. Factoring puede ser tedioso, pero hay formas de
acelerarlo cuando copia NPS, cuota
similar, sabes exactamente qué
cambiarlo. Veámoslo. Me tardé unos segundos en conseguir edición y crear hasta cero. Voy a quitar la página de
borrar por mí. No lo necesito para los detalles. Ya cambiamos todos los detalles porque todo lo que necesitamos
es un modelo de auto. Pero luego hay
algo más que puede necesitar mirar, que es la grasa que el modelo de
coche tiene mezcla. Por lo que necesitaríamos incluir los detalles de
la mezcla en
las tablas de modelos de automóviles. No creo que lo
hubiéramos hecho antes. Me cambié
al repositorio. Pero eso es algo que definitivamente
vamos a tener que implementar para la página de detalles
muestre el micrófono correctamente. Por lo que nunca modificamos
la interfaz, por lo que nunca tuvimos que modificar
los datos que regresaban. Realmente y verdaderamente, este debería ser CAR modelo dot dot name
porque queríamos ver, y este es el modelo de auto
y este es el mic. Está relacionado con ese punto. Definitivamente necesitamos
modificar cómo
obtenemos los datos porque nuestro
Getty acaba de obtener los datos. Pero ya vimos que
cuando queremos conseguir con los detalles de registros
relacionados, tenemos que hacer un
includes y así sucesivamente. Y no sabemos
qué incluir el genérico porque no puedo comer solo incluye algo sobre
la mesa porque diferentes mesas tienen diferentes propiedades que se incluyen. Así que definitivamente estamos
después en algún código personalizado para un
modelo de automóvil en ese escenario. Y luego por extensión, vamos a tener que extenderlo para el índice también porque cuando obtengamos la toda
la página del índice, probablemente queríamos no
sólo mostrar el nombre, al igual que con los detalles, probablemente
querías mostrar el micrófono también. Quiero decir,
eso depende de ti. Éste es probablemente opcional. No voy a extender
el índice para mostrar el mic, pero tendremos que
hacer eso por nuestros autos. Así que no he terminado de
ver todos los autos es, y se puede ver
aquí tengo algunos de ellos están mal tipos de datos. Hizo alguna refactorización, alguna refactorización
global que
mezcló una serie de cosas. Pero cuando miras esto, ves que estoy consiguiendo
un repositorio de autos. No he cambiado mucho
por el código aquí. Pero entonces tenemos el mismo
tema donde necesitamos la mezcla, los colores, los modelos que
sospechadamente faltaban. Sí necesitamos traer esos. Entonces eso significa que necesitaría
una mezcla re-realizar o leer antes de modelos y
nuestro repositorio para colores. Sí, nos deshicimos de un SEO tomando todos los contextos
porque conceptualmente los contextos
nunca deberían interactuar directamente con el controlador o la página. Pero luego creamos un modelo donde creamos
tal delineación entre los tres tipos de datos
que tenemos que inyectar tres
instancias diferentes del repositorio. Como siempre se ve, hay momentos en los que haces algo
porque tiene sentido, pero luego importa cuán granular necesitas conseguir
en base a tus objetivos. No aguantar eso. Vamos a seguir adelante y conseguir esos
repositorios adicionales. No quería aburrirte
si me ves hacerlo, pero esto es básicamente lo que parece y solo
voy a criar las líneas. Se puede ver dónde comienza y se detiene cada
línea. Sólo di que es muy, muy claro. Simplemente seguimos adelante e inyectamos repositorio por
tipo que necesitamos. Seguimos adelante e
inicializamos esos campos. No, en relación con cada llamada, vamos a hacer uso
de la cesta repositorio ella. Entonces aquí voy a decir
subrayar al pirata. Entonces este es el repositorio de autos. Este es el Create, por lo que insertos y estamos
pasando en el auto. De acuerdo, cualquier analítica
que la inteligencia siempre
te guíe en cuanto a ver necesidad del
tipo de datos es necesaria
en base al repositorio o comido. Ahí vamos adelante e
insertamos nuestro auto. No escuches. Lo estamos haciendo en modelos de autos. Por lo que sabemos que se trata de un área de lista desplegable en
cascada. Entonces en este punto definitivamente
necesitaría algún código personalizado. Porque cuando obtenemos r consigue todo, estamos obteniendo todos los
registros una vez, pero luego nos estamos
basando en ID. Obtenemos uno requerido
basado en el ID de clave principal aquí. Estamos haciendo ninguno de los dos estaban
consiguiendo que todos los modelos de autos fueran una fila completamente diferente es igual a unos valores diferentes. Así que definitivamente necesitamos tener
algún código personalizado para eso, pero aún no estamos del todo ahí. Vamos a asegurarnos de que todos nuestros métodos comunes sean iguales. Entonces para la mezcla, así que fui a ver en un repositorio
mezclador de puntuación dot obtener todo. Entonces solo puedo
reemplazar cada uno de estos. Simplemente copiaré y
pegaré un nombre de la industria, este auto modelos. Soy uno de esos repositorio
y este fue Colors. Colores. Colores.
¿ Tenemos color? ¿ Color? Déjame sólo copiar y
pegar en lo insensato. Ahí es un lento. Muy bien, por lo menos estos son fijos. Ahora voy a hacer
una pausa ahí mismo. Y si miras la página de
detalles y miras la página de índice, y como dije, para la página de edición e incluso la Create donde tenemos las listas desplegables en
cascada, tenemos que asegurarnos de que están buscando las
cosas de la tarjeta en el momento actual. Entonces, cuando
volvamos, veremos cómo podemos
extender nuestros repositorios.
28. Repositorios completos: Muy bien chicos, así que somos buck
y lo que vamos a hacer en esta lección es sentar
algunos repositorios personalizados. Déjame hablar de repositorios de
clientes. Hay momentos en que para ciertas entidades o
ciertas operaciones, necesitamos tener código personalizado
que no pueda ser genérico. Entonces caso en punto sería para nuestro crear donde tengamos nuestra lista desplegable en
cascada. Definitivamente necesitamos algunos métodos
personalizados aquí para facilitar el hardware mirando los modelos de automóviles en esta situación
particular. Entonces eso significa que
voy a tener que ampliar o modelos o modelos de automóviles para tener su
propio repositorio con sus propios métodos personalizados. Otro ejemplo de por qué esto
podría ser necesario sería como cuando queremos
mirar los detalles o incluso la lista de los autos, tenemos que incluir estos detalles específicos para el auto al buscar
en el modelo de detalles. Y cuando estamos leyendo sobre
la lista en el índice, definitivamente
necesitamos
los Incluye también. Esas son razones para
ampliar tu código. Esto es no, este no es realmente un
término oficial en programación, pero lo llamo pain
Driven Development. Cualquiera u otros
desarrolladores con él. En Desarrollo Impulsado, lo
que significa
que haces lo necesario para
el objetivo en cuestión. Y te pones fantasía
cuando ve requerido, pero no solo
empiezas los fondos
porque podrías exagerar
algo que es muy simple. Entonces en este punto vemos la
necesidad de este refactor. Así que sigamos adelante y lo hagamos. Lo primero que
vamos a hacer es volver a nuestro proyecto de repositorios. Fui a hacer clic derecho en contratos
y luego voy a agregar un nuevo elemento y elemento en
forma de interfaz. Este lo voy a llamar
repositorio de modelos de autos. Sabemos lo que necesitamos
para que sea
interfaz pública I repositorio de
modelos de autos. Entonces ahora, ¿qué hace este contrato? ¿ Cuál es el trabajo que este
contrato necesita implementar? Bueno, fui a decir que
necesitas implementar un método que es una tarea que es devuelve
una lista de modelos de autos, alguien que lo llame obtener modelos de
autos por manso, y se necesita un
parámetro int make ID. Ahora con eso, ese
contrato en su lugar, necesito una implementación a la
que voy a llamar un repositorio de modelos de automóviles. Y ese se creará
en la carpeta de repositorios. Y acabo de darme cuenta que escribí
repositorios mal en este punto. Siento mucho eso. repositorios que
sabe quién ama algunas ramificaciones debajo utilizandorepositorios que
sabe quién ama
algunas ramificaciones debajo, pero eso está bien. Podemos crearlos fácilmente. Así que adelante y
crea ese nuevo archivo. Simplemente seguiré adelante y arreglaré el,
arreglaré este
error de ortografía por así fuera. Entonces saber cuándo tienes tu clase de
implementación, bueno, tenemos que hacer
es heredar de la IA, un repositorio de modelos de automóviles. Entonces eso es bastante fácil,
pero esto va
a tener que ser una herencia WE
porque para uno, este repositorio de modelos
debería poder llevar a
cabo todo lo que
el genérico pueda hacer. Debe ser capaz de hacer
todo lo que genérico pueda hacer, así
como cualquier cosa personalizada. Nuestro nuevo contrato está reservado para operaciones
personalizadas
relativas al modelo de automóvil. Pero entonces todavía necesita poder llevar
a
cabo todo lo que
el genérico puede hacer, que es guardar cambios y
esto y aquello y aquello. Lo que tenemos que hacer cuando tenemos nuestra implementación
es heredar del repositorio
genérico lo
relativo al modelo de coche. Muy bien, entonces estamos viendo
la implementación
del repositorio para
nuestro modelo de automóvil. Quiero heredar de eso, incluir cualquier referencia que falte, así
como mi contrato de vestuario. Entonces cuando veas esto ahora, y yo hago Control dot
implementa interfaz, solo
implementará el trabajo prescrito por este contrato. No obstante, trabajan en aplicado por el repositorio genérico también
está ahí en segundo plano. Oh, me está quejando de
que no hay argumento dado que se corresponde con si estoy heredando de algo que tiene un repositorio genérico de
inyección, tiene una inyección
para el contexto. Si hago un llamado al repositorio de
modelos de automóviles, que está heredando de eso, entonces el repositorio de modelos de automóviles
necesita proporcionar todo lo que la clase base necesita. Tan larga historia corta, y no fue constructor el
que va a tomar los contextos CMDB
o simplemente incluso copiarlo. Contexto DB reserva de automóviles, seguir
adelante e insertar cualquier referencia
faltante, pero también crea un
asignado el campo. Entonces voy a tener que
proporcionar el mejor método. Con una instancia del contexto, es casi como una
cadena de margarita es como una entrega. Por lo que Albert llamando al
contrato para i modelo de coche, sabrá
que su
implementación es esta. Cuando eso se llama, va,
se obtiene el contexto del contenedor
del COI y dice,
Ok, base, que es
nuestro Repositorio genérico. Aquí hay una copia del
contexto que tengo. Entonces ambos están en el mismo hilo
contextos, ¿verdad? No. Y luego también tengo
la implementación del costo de los métodos
para el repositorio. En este punto, consigue modelos
de autos por micrófono. Ni siquiera voy a
hacer mucho trabajo duro. Sólo voy a
saltar de nuevo a la crear recorridos que en autos. Tenemos el método create
que tiene todos estos. Sólo voy a
copiar todo esto. Vuelve a mi repositorio de
modelos de automóviles. Voy a pegar todo eso. Por lo que los modelos VAR serán
iguales a nuestros pesos, los contextos o al cambio de nombre. Vamos a cambiar el nombre de eso en
los contextos cuadrados. Así que espero los
modelos de autos de punto contextual donde todo eso, y luego solo voy a
devolver modelos. Estoy recibiendo este error
porque no es el asíncrono, haz que el método sea asíncrono. Y ahí vamos, Todo no es bueno. Por lo que ahora tenemos un
repositorio de clientes que nos puede dar la funcionalidad personalizada para esta consulta SQL personalizada. Ese punto en el
crear otra división y ver si todo, todos los cambios que le
hacemos siempre presionando Control S en este repositorio. No necesito tener el repositorio
genérico para un modelo de auto porque esto se va a
utilizar más de una vez. Este modelo de auto sí, repositorio de modelo de
coche se
está utilizando para conseguir que nuestras necesidades se utilicen para obtener toda la lista de modelos de automóviles así como
conseguirlos relativos para hacer identificación. En realidad puedo reemplazar
el ojo genérico con repositorio de modelos de automóviles
AI. Éste no es el genérico, éste necesito
el método costal, consiguiéndolo por los mansos. Y entonces no puedo simplemente ninguna línea roja porque todavía
tiene acceso a bien. Estoy recibiendo una línea roja
y creo que eso es porque fallé en heredar. Pido disculpas, debería haber heredado del repositorio
genérico en este punto relativo
al modelo de automóvil. Muy bien, por lo que de la misma manera
que la interfaz
heredaba o la implementación heredó del genérico. El interfacing se hereda
del ojo genérico, para que pueda ver
todo el trabajo que el genérico puede hacer así
como darle su propio trabajo. Y luego permítanme simplemente acercar de
nuevo a la implementación. Aquí no hay errores porque
ya estoy haciendo referencia
a la implementación, que básicamente la idea
es interpretar
ahí es donde el trabajo para que se ponga alto y todos los demás
para la R genérica, así
como los métodos
personalizados definidos por el contrato personalizado aquí se
implementaránla R genérica, así
como los métodos
personalizadosdefinidos por el contrato personalizado. Cuando salto
de nuevo al Crear. No, La línea roja se
ha ido. Ahí vamos. Muy bien, así que por
esta parte de ella, en realidad
puedo simplemente
devolver nuevo peso. Mi repositorio de autos dot
get car models by Meek, dándole el Manso ID que
entró como parámetro. Lo cual elimina
todo este código. No necesito ese código. Ya verás una vez más,
si ese código cambia, solo
tengo un lugar para
cambiarlo o simplemente me mira,
esto se ve mucho
más limpio que tener el,
todo el código de contexto escrito
nota en lugar de la página. Esto se ve mucho más limpio. Una vez más, si
funciona, es bueno. Es sólo cuestión de cuáles son
tus objetivos y ¿
necesitas y mantenible
hasta cierto punto o cuáles son los problemas que
estás tratando de resolver? No lo hagas solo porque conoces el patrón y
necesito aguantar para hacerlo, hazlo porque está resolviendo
un problema que tienes. Ese es nuestro ajuste
a los modelos de autos. Para crear BH más bien, nota que un coche genérico
modelos porque tenemos este nuevo repositorio que es personalizado y necesita
ser inyectado en. Necesito dejar que la aplicación que tengamos otra
que se pueda inyectar. Hice esculpir para lo genérico, recibiendo un error aquí porque eso cambia el espacio de
nombres, no hay problema. Pero entonces también
necesito agregar alcance
para que nazca el nuevo cliente
, ¿verdad? Por lo que fui a decir Agregar soporte tipo
escuela, modelo de
auto,
repositorio de modelos de autos, coma. Y la implementación
de este
será repositorio de modelos de automóviles. Esa es la diferencia
en cuanto a dimensiones. Entonces debido a que éste es genérico, que consigue después en un diferente,
pero en términos generales, es como verás la interfaz o contrato e
implementación meta de peering cuando se están registrando
en el contenedor COI. Muy bien, entonces eso es realmente lo tenemos que hacer para
asegurarnos de que funcione. Volvamos a los
detalles parte del auto. Bueno, los detalles partes
de los modelos de autos tienen una historia similar donde en cualquier lugar tengamos el modelo
genérico de auto, en realidad
podríamos simplemente usar
nuestra clase específica que
acabamos de definir I repositorio de
modelos de autos. En lugar de lo genérico. Esto es lo que estamos usando en cualquier momento que estamos tratando
con modelos de automóviles porque métodos
personalizados como conseguir el modelo de automóvil con los
detalles no es necesario. En este repositorio. Lo que voy a hacer es
volver a saltar a nuestro contrato. Y voy a crear
otro método que va
a decir volver sólo
el modelo de auto. Y fui a ver conseguir modelo
de auto con detalles. Entonces tenemos que
darte la idea
del modelo de auto que
queremos recuperar con detalles. Ahora una vez que he hecho esto y poner estas pequeñas pestañas aquí para que
pueda navegar fácilmente a archivar. Entonces si no tienes esas
tinas que acabo de mostrarte, puedes ir a Herramientas,
Opciones, ir a C toma editor, luego C-sharp que avanzado y garganta todo el
camino de abajo a abajo. Y dice mostrar
herencia Marzo, y es experimental. Entonces lo he visto funcionar para algunas personas y
no para algunas personas. Eso es sólo para que
puedas habilitar eso. Por lo que hace que la navegación
entre
las clases padre e hijo en cuanto a la herencia
va mucho, mucho más fácil. De acuerdo, por lo que ahora hay un nuevo
método a implementar. Sólo voy a
controlar implementado. Y entonces voy a ver aquí que si
lo estoy consiguiendo con detalles, lo que se necesita para
regresar es mi contexto. Modelos de autos Dot, dot find
no son encontrar modelos de autos que incluyan y fui a incluir mi
propiedad de navegación para el mic. Muy bien, luego
al final
de toda esa LLC la primera
tienda impagos. Expresión Lambda donde el ID en el registro es igual a
la idea que busco. Entonces cada vez que llamaríamos a esto, sabemos que están garantizados
para conseguir buck los modelos de autos
con cualquiera incluye. Si lo llamamos los gets, el regular obtiene su genérico,
están molestos Tod's. Eso es todo lo que podemos poner
una vez más en métodos
específicos para el repositorio
específico, por una razón específica. Vamos a saltar de nuevo
a los detalles ahora. Y puedo reemplazar esto por obtener modelos de autos con nuestro modelo
actual con detalles. Sé que cuando regrese el
modelo de auto, definitivamente
va a tener la propiedad de navegación para
el tipo de leche incluida. Por las tarjetas. Tenemos un problema similar. Necesitamos métodos personalizados para que el repositorio de autos pueda recuperar
aquellos con detalles. Y para el índice necesitamos
incluir los detalles ahí. También. Lo que vamos
a hacer es repetir o pies. Vamos a tener un contrato
personalizado y nuestra implementación personalizada en
nuestro proyecto de repositorios. Entonces así es como va a verse el contrato
. Yo autos repositorio una vez más, heredando del
repositorio genérico relativo al auto. Entonces tenemos nuestra tarea. Coche podría conseguir auto con detalles. Y la implementación de NOR
va a decir autos
repositorio heredando del repositorio genérico relativo
al auto y al contrato. Entonces todo se inyecta
igual que lo hemos estado haciendo
hasta este punto. Y luego tenemos el método
conseguir auto con detalles, por
supuesto que lo hice asíncrono y un peso y el mismo código que
estaba en la página de detalles, solo lo corté y lo
pego aquí mismo. Pesé el contexto
dot cars incluyen todos estos detalles y obtengo
el primero o por defecto. Buck en nuestra página de detalles, podemos empezar ya no
inyectando el contexto, pero ahora podemos inyectar un repositorio de
autos o un repositorio de autos. Esto sería,
sólo puedo llamar a éste. Repositorio sigue siendo
sólo uno allí. No hay problema. Repositorio. Incluir referencias faltantes, seguir adelante y crear la
NSA y el campo. Elimino todos los rastros del
contexto y luego agrego el subrayado solo
por mi
tranquilidad donde estamos consiguiendo, solo
digo repositorio
dot get car con detalles y darle
el valor id dot. Si no lo expliqué
antes porque es pequeño, múltiple, tengo que
ver id dot value. Y por supuesto después de eso. Y como dije, hice algunas refactorización en Visual Studio cambiar
demasiadas cosas ahí a la 1. Entonces algunos de mis
tipos de datos están equivocados. Pero después de arreglar eso y estoy seguro que no
tuvo ese problema. Verás aquí todo está
bien con nuestra página de detalles. Y esto se ve mucho más limpio. Entonces tenemos que hacer algo
así para el índice. Ahora, digo algo
así para el siguiente porque esto es múltiple, esta es toda una lista
con los detalles. Necesito otro
método aquí que
realmente me esté dando la lista. Fuera de coche. Fui a decir conseguir
autos con detalles. Y no obtendrá ningún parámetro. Y eso debería ser lista. Iremos a buscar la lista
de autos con detalles. No hay problema. Implementación
Kohlberg a aquí, lote
controlado
implementar interfaz. Y sólo voy a repetir
esa declaración de retorno aquí. Por lo que regresa contexto de autos con
todo lo incluye lista de puntos. Y tiene que ser una cosa
tan controlada hasta hacer método asíncrono y con punto y
coma y eso está bien. Entonces en nuestra página de índice, todos estos no pueden
ser Repositorio y por
supuesto necesito actualizar el constructor
y la inyección. Así que sólo voy
a atajarlo. Simplemente copia una similar, cambia las pocas flechas. Y entonces puedo notar un repositorio dot obtener tarjetas con detalles y cerrar eso por
supuesto después de 08. Y eso es básicamente
parece faltar los tipos de datos mezclados y
deberíamos estar bien para ir. En otros lugares. Vamos a tener el on
post delete, no hay problemas. Entonces no tengo que
encontrar nada. No tengo que
comprobar si autos no. En cambio, si el registro
NO ES nulo, veré repositorio. Y por supuesto tendré que
esperar este repositorio Dot Delete y le damos
el valor de punto ID de registro. Eso es todo. No hay código agradable y limpio que realmente nunca
quiso codificar detrás de eso mientras que
las declaraciones y todas las
operaciones complejas y así sucesivamente. Quieres abstraer esa ALT. Todo esto debe hacer
es llamar a un método, conseguir puerta en los mitos,
hacer el trabajo duro. Yo llamo al método y
esperando la respuesta. Haces todo el trabajo
y solo
diciéndome cuál es el resultado. Fui a este punto, construir solo para asegurarme de que he hecho todos los
cambios necesarios. Y tengo una flecha porque en mi startup tengo el
espacio de nombres mal escrito, pero sí necesito
asegurarme de que tengo. Antes de que
yo repositorio de autos, te voy a mostrar
qué tipo de error
verás si no agregas la falla al
registrar tu servicio. Por lo que sólo va a Control F5 para ejecutarse
sin depurar. Conseguir esta otra
flecha porque había renombrado manso para mezclar. Muy bien, así que
déjame intentarlo de nuevo. Control F5. Y nuestra aplicación está buscando colores y
modelos de mezcla solo para asegurarnos de
que estamos viendo los datos. Entonces vemos aquí que están trabajando nuestros
repositorios. Si hago clic en Editar, hacer un cambio y luego guardar, vemos que los cambios se
guardaron con éxito. Por lo que sabemos que los repositorios
trabajando en ese sentido, si miramos a los demás que
ven todos ellos volviendo. Entonces si hago clic en los
detalles para los modelos, verás que el micrófono
está llegando, los detalles están regresando. Ahora si hago clic en autos, cerremos todos estos
y hagamos click sobre autos. Ahora mira esto que estás viendo incapaz de resolver el tipo de
servicio para el repositorio de autos
i
mientras intentas
activar los modelos de puntos de índice. Así que esa es sólo una manera
elegante. Ya voy a ver. Olvidaste poner el registro en
el archivo de inicio porque no hicimos esto. Te das cuenta que todo
funcionó bien para los modelos. Todos ellos funcionan bien para modelo. Es el mismo concepto. Entonces porque no nos
registramos es decir auto, así que voy a decir que
yo repositorio de autos se implementa por repositorio
de autos. Incluir cualquier referencia faltante
o lo siento, Eso son autos. Sigan olvidando eso. Eso es repositorio de autos.
Ahí vamos. Simplemente puedo hacer una compilación
y la refrescar la página o reescribirla en D en, sin depurar y hacer clic en la página del curso.
Sé que se está cargando. Ves que sacas esas
cuadras de un error. Si olvidas tu registro
de servicio. Y por extensión, mira eso. Estamos viendo todos nuestros detalles. Si vas a Editar, estamos
viendo todos los detalles. Si vamos a crear o una lista desplegable en cascada con todavía operar como
esperamos que lo haga. Muy bien, entonces esos son
pequeños cambios que quieres hacer nuestras
propias vacaciones de duda. Esa es la llave poco limpia. Pero una vez más, no
porque tengas un martillo, todo debería
parecer un Neil. Muchas de las veces aprendemos un patrón y la nave
estamos viendo la cosa, hemos usado este botón. Algunas aplicaciones son
lo suficientemente simples como para que no tengas que agregarle ese nivel de abstracción
y complejidad. Pero al final
del día vemos a dónde va definitivamente. Un cortafuegos, se incrementa Cómo mantenible la
aplicación. Va a serlo.
29. Conclusión de la sección de repositorio: Muy bien, Así que si giras otro hito y vamos a hacer check-in hacia repositorio de
GitHub. Así que vamos a hacer un resumen
rápido de lo que pasamos en esta sección. En primer lugar, habíamos identificado
que queremos reducir parte de la repetición trimestral
y aumentar la mantenibilidad general y la testabilidad de nuestra aplicación. Entonces el paso número uno para hacer eso fue crear o repositorios. Entonces creamos lo que llamamos
el repositorio genérico que tenía muy, lo que debo decir, no, genérico para uno pero formas muy
abstractas de declarar la forma
básica mostrada es que cada uno de los elementos de base de datos
necesitarán para llevar a cabo. Al hacer eso,
pudimos utilizar dos archivos para compensar muchas tablas de
bases de datos. Entonces entre el repositorio
genérico, bajo repositorio genérico, tenemos suficiente
cobertura de código para casi cualquiera de los escenarios básicos para cada una de nuestras tablas
en la base de datos. Por extensión, somos
capaces automatizar ciertas cosas
que habríamos tenido que
hacer en un monitor personalizado
o haciendo una serie de lugares. En cada vez que
creamos un elemento, pudimos automatizar eso
independientemente de qué elemento
se esté creando o sabemos cómo bajarlo a la entidad de dominio
base, cual será cada elemento. Toda entidad u otra será. Y cuando se está agregando, podemos seguir adelante
y modificarlo todo antes de que realmente
lo comprometamos con la base de datos. Entonces esas son operaciones muy claves
en lo que estamos haciendo. Después de tener nuestros repositorios
genéricos, también
nos dimos cuenta de que había ciertas operaciones que
necesitaban un toque personalizado. Entonces en lugar de tocar
las cosas genéricas, nos metemos en la cabeza y lo extendimos. Entonces poder extender una clase sin modificar
la clase principal, ese es el principio Liskov
y ese es el L en sólido. Estamos mirando la
inyección de dependencia porque en ninguna parte creando objetos que
se puedan inyectar a voluntad, estamos mirando en seco, que es no repitas tú mismo. Estamos mirando la segregación de
interfaces, razón por la
cual tenemos
todos estos contratos y sus implementaciones. Número de principios que
entran en el cuatrienio. Entonces, ¿qué queremos extender? 104 ya implementaron
repositorios y vieron sin la superposición, modificándolo y viendo bien, repositorio
genérico, cosas
domésticas específicas a otra cosa. Creamos nuestros específicos,
yo un repositorio modelo de coche con solo
operaciones relacionadas con el modelo de automóvil que requieren poco toque personalizado. Tenemos la implementación y también tenemos el
repositorio de autos. Yo sí dije de, creo que nuestro modelo anterior
que estaría bien cuando estamos agregando un auto para ver si
existe la división de licencia y si lo hace, no lo añadas,
sí recuerdo ver que
sería agradable de hacer. Nunca llegamos a hacerlo. Veamos
cómo se vería eso. Una vez más, cualquier
disfraz que necesites, lo
pondrás en el repositorio
relativo. Entonces en este caso, sólo
voy a duplicar esto. Lo siento, ese es el modelo de auto que
quería en autos. Entonces voy a
duplicar este método. Esto sólo va
a devolver un booleano. Boolean va a ver conseguir coche es lección dividida existe. Esto llevará el número de placa
extrema. Sólo voy a
decir que juega el número. Ese es su parámetro. Una vez más, si tenemos
dentro de la interfaz, pasamos a la
implementación. Y luego se va
a completar y vamos a Control dots, dejamos que implemente la interfaz. Y entonces puedo devolver contexto. Por favor mira en la mesa de autos y dime si hay alguno. Y por supuesto usamos nuestra asíncrona. Cualquier número de matrícula de q-dot
asíncrono siendo igual al
número de placa que se acercó. Aunque debido a que son una cadena, probablemente
querrías
poner todo a bajar porque mayúsculas es
diferente de minúsculas es bajar. Otra cosa que querrías
hacer es probablemente
recortarlo de cualquier especie que
pueda estar en el altar. Alcanza. Con esos dos hechos a
lo que hay en la base de datos, también lo querías a
cualquier valor que sea posible. Todo será minúsculas
y todo se
recortará de todos los espacios en blanco. Y luego comprobaremos
para ver si hay alguno. Por lo que tengo que esperar
este control de puntos. El método Asíncrono. Ahora eso está extendido,
agradable y fácil. Si quisiéramos incorporar
ese nodo check en nuestro Create y por extensión,
la operación de edición. Lo que puedo hacer es hacer mi
propio cheque aquí para ver si puedo ver en el repositorio de partituras
o puntos del repositorio de autos. Apenas empiece a escribir clases
divididas hasta que lo vea. Lo cual no soy,
no estoy viendo nada porque esto
sigue siendo el genérico. No hay problema. Estoy usando mi disfraz. Yo autos repositorio
y puedo reemplazar eso en todas partes para que la
inyección funcione correctamente. Ok. Todo el mundo está bien. Sono manera. Si miro hacia atrás, vería que
tengo acceso a los métodos personalizados es
menor que split existe. Y luego pasaría en el auto puntos número de
matrícula que viene del formulario. Si existe. Lo que quería hacer es hacer inválido
el estado modelo porque no
hay matrícula presente, es válida. Quiero que sea inválido. Esto está en su lugar así que
puedo decir estado modelo, dot add error, error de modelo. Y esto toma dos parámetros. Dice cuál es el
campo que quieres que agregue la herramienta de error y cuál es
el error para el campo? Puedes usar una cadena, pero luego te mostraré
el peligro o uno de los problemas que usan
la corriente así. Eso está bien. Quiero que se
añada a este campo. Y el mensaje debería decir, número
de división de licencia ya
existe. cuando termine agregar el
error del modelo y llega a esta declaración
va a ver que no
es válido porque
hay un error. Yo lo hice. Y luego volverá a cargar el pH mostrando el error
debajo del campo. Se puede experimentar con eso. Realmente no
voy a probar eso. Ese no es el punto
que estoy tratando de empujar. Lo que estaba diciendo sobre el
campo es que por fuerte mecanografía y
si es un caso donde terminamos cambiando
el nombre de este campo, tendríamos que recordar que tenemos que
actualizar la cadena. No cambiaría
automáticamente. Entonces para mantenerlo fuerte deseo
a lo que hacemos es ver nombre de pasamos en el
nombre directo de la variable. Por lo que sólo lo convertirá número de
matrícula y saber que esa es
la mujer de campo. Este es el mensaje de error. No hay problema. Solo estoy mostrando
lo fácil de
saber simplemente extender la
funcionalidad. Ya está inyectado. Todo lo que hice fue
cambiar el tipo de datos, que es una operación de una sola vez. Como necesitas extenderlo, solo pones otros métodos
y los usas para voluntad. Eso es todo lo que
se habría requerido para extender esta funcionalidad para que puedas seguir adelante y probarla. Como dije, tenemos que
hacer eso en el Edit también. Así que déjame hacer eso y
asegurarme de que tengamos cobertura completa. Antes de esos puestos. Tenemos que hacer eso. repositorio de Kiara una
vez más es el genérico. Por lo que tengo que decir por
aquí, yo repositorio de autos. Muy bien. Cambia esto. Creo que los repositorios podrían tener su propio espacio de
nombres, pero lo arreglaré. Eso está bien. En ese punto. Eso es todo lo que realmente
necesitamos hacer para asegurarnos que nuestros contratos y
todo sean extensibles. Para que puedas seguir adelante
y probar eso. Lo siento, sólo estoy tratando encontrar lo que necesitaba para
cambiar. Qué son los demás. Incluir su repositorio de autos. Disculpas. Muy bien, entonces IQR es repositorio y entonces
todo debería estar bien. Se usará declaraciones necesarias, todos los errores se han ido
y el mismo tipo de validación está
sucediendo cuando editamos. Esto es lo fácil que es agregar validaciones
personalizadas debido a
nuestros métodos de base de datos personalizados. Con nosotros. Eso es todo, ya he terminado.
Vayamos con buenos cambios. Una vez más conseguir los cambios
deben ser a la sociedad. Si no, vas a ver y sacar la
ventana, obtener cambios. Pondrás en tu mensaje de
compromiso. Y entonces solo puedes
comprometerte todo y hundirte. Eso empujará tus
cambios a GitHub, derribar cualquier cambio que hagan tus compañeros en consecuencia.
30. Configuración de la autenticación de usuario: Chicos, bienvenidos de vuelta.
Entonces en este punto, tenemos mucha
funcionalidad trabajando para nosotros. Y a pesar de que puede
no parecer tan elegante, has llegado a la realización o compra saber que todas las aplicaciones están haciendo, están leyendo desde la base de datos, actualizando datos, poniendo datos
ahí, o eliminación de datos. Eso es todo lo que
realmente está ahí. No importa lo
complicado que parezca. Todos los fondos comen pueden parecer. Eso es todo a lo que se reduce. Si quieres ampliar esta
aplicación para hacer más cosas, poniendo más mesas, quiero decir, se llama reserva de autos. Y nosotros hoy es todo lo que estamos
haciendo es meter en los autos. Si quieres poder poner en la reserva real
que ningún problema. Veamos hacer eso. No obstante, antes de ponerle
en esa funcionalidad Beta, quería asegurar la
aplicación en cierta medida, por lo que no necesitamos una. Tenemos que ser capaces de
saber quién está haciendo qué
en nuestra aplicación. En este punto, cualquiera puede simplemente ejecutar la aplicación
y empezar a agregar autos, agregándome modelos emocionantes. Queremos restringir
ciertas cosas a un
usuario registrado que conocemos. Y para más adelante
miramos cómo podemos sentar niveles entre los
diferentes usuarios que son capaces de hacer las cosas
en nuestra aplicación. Vamos a empezar
ampliando nuestro contexto DB para poder manejar operaciones
relacionadas con el usuario. Eso es en realidad
más simple de lo que suena. Todo lo que tenemos que hacer es en lugar
de decir contextos DB, decimos identidad, contexto DB. Identidad es el marco o la biblioteca
que nos da dotnet core para empezar a agregar operaciones
relacionadas con el usuario a nuestra aplicación. Entonces al ver el contexto DB de identidad para la herencia,
Controlo los puntos. Verás que necesito
incluir algunas bibliotecas nuevas. Estamos utilizando NuGet fin de semana
para decir instalar paquete, encontrar e instalar brotes. Recuerda que tuvimos algunos problemas de
versionado con el Entity Framework Core y
la versión de la biblioteca. En realidad es más seguro usar
NuGet manualmente. Entonces voy a hacer clic derecho
ir a Administrar paquetes NuGet. Y para nuestro instalado, sabemos que estamos trabajando
con 5.8 en este momento. Entonces voy a ir
a los bros y voy a buscar identidad. Solo digo que he sido identidad, núcleo de
identidad y luego vemos Microsoft.asp.net Identidad básica
a Entity Framework Core. Entonces ese es el que
queremos y luego estamos lidiando con 5, eso. Así es como usas NuGet
package manager para asegurarte de
que todas las versiones
estén en el mismo hígado. Entonces pegué Instalar, permitir que haga lo suyo, acepto cualquier problema
que surja. Cuando eso se hace,
puedo saltar de nuevo a mi contexto DB e incluir
la declaración de uso que falta. Ahí vamos, y
todos están contentos. Muy bien, luce bien hasta ahora. No. En nuestra se inicia archivo. Veremos que tenemos
un pequeño error aquí donde estábamos agregando
los contextos DB. Y está diciendo que
necesitamos las declaraciones de uso. Así que sólo voy
a Controlar puntos. Y dice instalar el paquete referencia que datos o simplemente agregó
una herramienta de referencia. Sólo voy a
sumar la referencia. Más bien solo usaré
una versión local. Así que solo usaré la versión local. Y esa es otra fortaleza
de la gestión de paquetes. Nos permite
asegurarnos de que no lo somos, que todas nuestras versiones
estén en el mismo nivel. Así que sepan que el error ha desaparecido y siempre
sigue en la startup. Y lo que tenemos que hacer es
hacerle saber a la startup que estaremos utilizando
servicios de identidad en la aplicación. Por lo que fui a decir servicios dot add debería ver identidad predeterminada. Si no, entonces en
identidad, ahí vamos. Para que puedas agregar núcleo de identidad. Al agregar conocimientos básicos de identidad, dirán qué tipos de usuario, el tipo de usuario predeterminado se obtiene con identidades, usuario de identidad. Y nos fijamos en cómo esto se
puede extender en unos pocos. Pero sólo vamos a agregar con usuario de
identidad poner en las declaraciones que
faltan usando, y luego podemos pasar
en opciones si queremos. Entonces cuando digo que puede
pasar en opciones, puedo ver opciones con una expresión
lambda, opciones. Y podemos explorar
diferentes opciones que queremos ir por nuestros usuarios. Y hay conos. Por ejemplo, lo que
vamos a hacer es ver opciones en un inicio de sesión requieren confirmado
un cono para saber como cuando te inscribes en
nuestra página web y te
envían los Tolkien para decir, por favor confirme su colon de,
lo que es hasta la fecha de vencimiento. Realmente no se puede iniciar sesión. Bueno, eso es lo que
podemos hacer cumplir aquí. Puedo ver requerir cuenta
confirmada. Por defecto,
va a ser requerido. Así que en realidad sólo voy
a decir es igual a falso. Sólo porque es una aplicación
interna, probablemente no
voy
a estar pasando por los rigores fuera pedir a nadie que confirme
sus conos de todos modos. Pero solo te estoy mostrando
lo que es posible. Por lo que tienes un montón de
opciones a tu disposición. Y si necesitas establecer múltiplo, solo
puedes hacer eso
usando un bloque de objetos. Y terminas cada línea con un punto y coma y agregas
tantas opciones como necesites. Estamos agregando núcleo de identidad
relativo al usuario de identidad, que es una clase de
usuario predeterminada que nos da por marco de identidad
o núcleo de identidad otro. Y entonces podemos decir agregar reglas. Si queríamos usar reglas, podemos decir que quiero usar
reglas en la clase fila. Hay uno por defecto
en la regla de identidad. Una vez más, podemos
personalizar eso. Generalmente no
personalizo ese, para ser honesto, suelo
usar una regla predeterminada. Entonces al final de
eso tenemos que decirle
a Add Entity Framework tiendas. Entonces necesito decirle
dónde estamos almacenando nuestra información de usuario? Por lo que realmente sería
pedir nuestro contexto DB. qué contextos
debo usar para inferir qué base de datos
necesito almacenar las tablas relacionadas con el usuario. Ahora lo que pasa
es que a algunas personas les gusta usar la misma base de datos para aplicaciones y cosas relacionadas con
el usuario. Algunas personas los separan. En esta actividad, lo voy a mantener simple y voy a usar el mismo contexto
tanto para las cosas regulares como para
las cosas de los usuarios. Una vez más, algunas
personas se separaron. Entonces, si quisieras separarlo, crearías
otro contexto DB. Al igual que todo lo
que tenemos este aquí. Lo que podrías hacer es dejar éste como solo heredar de contextos de DB y crea
otros contextos de DB que
hereda de contextos de base de datos de
identidad. No necesitaría ninguna mesa
porque verás cómo la herencia de justicia
nos dará las mesas que queremos. Y entonces estarías bien. Y por supuesto que tendrías que tener la otra
cadena de conexión aquí. Y configuras tu
contexto DB en consecuencia, o tu
contexto de identidad en consecuencia. Se necesitan algunos bits
de configuración, pero una vez más, la
ruta simple usando una base de datos, ya
tenemos el contexto. Sólo necesitamos estas tres líneas. Y luego podemos agregar la aplicación de tienda de
Servicios de Identidad. Y sabrá
que debe estar buscando este contexto de base de datos para
todas sus necesidades de conectividad. Muy bien, así que con
todo eso hecho, podemos ir a nuestra Consola de Administrador de
Paquetes. Y cuando tenemos eso
abierto y funcionando, podemos cambiar el
proyecto predeterminado como sabemos. Lo configuramos en datos. Y voy a decir añadir Mi acuerdo. Hice mesas de usuario. Ahora nota que no hice nada. No creé una nueva entidad. No lo hice Lo único que hice
al contexto DB para hacer cambiar
la herencia. Pero mira el archivo de
migración que es un barco para generarse. Entonces estamos recibiendo
una migración migra. Mira toda esa
gran agregación. Por ahora, deberías estar familiarizado
con las migraciones parecen. Simplemente señalaré qué
mesas se están creando. Conseguir uno para las reglas, uno para los usuarios. Y se ven todos los campos
que se generan para el usuario. Y todos ellos son
relativos a los usuarios de identidad. Así que con solo ver al usuario de
identidad aquí, estamos obteniendo todos estos campos estaban
recibiendo reclamos rove, reclamos de
usuarios y un montón de otras mesas con
un montón de cosas. Algunos de ellos es posible que
ni siquiera realmente use cualquier crea los índices
y cualquier clave foránea. Y luego por supuesto, no
sólo deshace todo eso. Eso es lo que acaba de cambiar la herencia
de contextos VB, ese contexto DB de identidad, eso es lo que resulta el cambio. Dentro de la consola de Package
Manager. Si lo hago actualizo base de datos y permitirle tener
su camino con la base de datos, lo que notarás es en la base de datos obtenemos un montón
de tubo nuevo diremos si
acabo de hacer una rápida actualización y miro en la base de datos y las
tablas que tenemos. Verás que tenemos todas esas nuevas tablas que se
agregan a la base de datos. Sólo deja que eso justo ahí. Estás poniendo en
tus mesas de usuario. Sabe dónde almacenar la información del
usuario y
no tuvo que sentarse
y escribir ningún código personalizado. Y cualquier código personalizado
que estés a punto escribir es realmente debido a las necesidades
de tu negocio. Porque quería
arreglar en la mayoría de estos, pero fuera de la caja, las bibliotecas de
identidad se encuentran con esta
alma Paul comida y tan fácil. Entonces cuando volvemos, lo que
miramos es extender tabla de
nuestro usuario porque en este
momento los usuarios estables,
sí , tiene muchas columnas, pero notarás que no
son necesariamente columnas
útiles en de como un
entorno de negocios o ideas. Tenemos una identificación, sí o no. Yo uso un nombre y un
correo electrónico pero no sabemos el nombre de la persona. No
sé qué lo usa. Esto solo se
basa en su nombre, FirstName, LastName,
incluso fecha de nacimiento, cualquier cosa que quieras almacenar
tanto al usuario como solo
imagina esta aplicación como una aplicación se utilizará en acompañar a cualquier empresa en la
que te encuentres. Tú, ellos quieren saber quién
eres cuando inicies sesión. No quieren poder
ver toda la información. Bueno, aquí es donde
comienza a almacenarlo. Cuando te crean en este sistema,
suelen poner en orden. Ahí es cuando
volvamos, veremos cómo podemos
extender la mesa a voluntad.
31. Extende la tabla de usuarios: Muy bien chicos. Por lo que la última vez que estuvimos
aquí, estábamos mirando a
configurar las tablas de identidad en nuestra base de datos. Ahora necesitamos saber
cómo podemos extender esas tablas para
asumir diferentes campos. Vamos a empezar
con el usuario de identidad. Cierra algunos campos, lo que quiero más campos. Una forma fácil de hacer eso
sería en los datos, solo crea nueva carpeta. Veré identidad para que sepamos que algo en este
hoyo esté relacionado con la identidad. Entonces tengo clase, así que puedes nombrar cualquier cosa a la
clase. Por lo que el nombre más popular que
verías su usuario de la aplicación. Pero una vez más, ¿cómo se llama? Depende de usted y de su
operación y de su objetivo. Digamos usuario de la aplicación. Es una clase pública
que va a
heredar los
rasgos de carácter de un usuario de identidad. Usuarios de identidad, el
usuario predeterminado, voy a decir, bien, bueno, tienes todo lo que tiene un usuario
predeterminado. Pero también lo tienes, aquí es donde podemos
empezar a poner en String nombre, apellido. Si quisieras poner
una identificación de empleado, siguen siendo vuelo o algo
único para esa persona. Entonces voy a parar en
nombre y apellido. Fecha de nacimiento,
creo que sumar la fecha de nacimiento sería
una buena actividad. Fecha de nacimiento. Muy bien, eso es todo. No, necesitamos que el usuario de
la
obligación sea la clase de usuario predeterminada
cada vez que
estamos haciendo nuestras operaciones que tengamos acceso a los campos adicionales
en el lado del código, pero también necesitamos extender la base de datos que realmente
se almacenará en estos campos. Entonces una startup, necesito
cambiar AD Identity
core de solo ver usuario de
identidad para saber ver el usuario de
la aplicación en
cuanto a código cada vez que estamos haciendo algo de usuario, relacionado con
el usuario, más
bien, estará utilizando este tipo de datos y nos dará
acceso a esos campos. Para la base de datos, necesitamos volver
a nuestro contexto
y posterior contexto
DB de identidad ni por corchetes de
ataque
que debería estar usando. Y si miras los
corchetes de tipo dicen dame el usuario t. Si intentara tarjeta, auto
Let's IV funcionaría. Solo están queriendo una
clase si usara coche, no, los cambios de época, él decía que no se puede usar como parámetro de tipo para el usuario t. Eso es lo que decía. Recuerda cuando estamos
hablando genéricos y de los tipos de datos, dice usuario T, donde el usuario es de
tipo usuario de identidad. Por lo que tiene que ser alguna entidad que sea de
tipo identidad usuario, como el usuario de la aplicación
que acabamos de dejar heredar. Para que pueda saberlo, poner al usuario de la aplicación ahí
y todos están contentos. Sepa que el contexto DB
sabe que estoy usando el usuario de
la aplicación si
hago una nueva migración. Entonces fui a decir que hice usuario, hice más campos de usuario
como mi migración. Va a reevaluar
saber y decir, está bien, estoy lidiando
con un nuevo tipo de datos. Y este nuevo tipo de datos tiene
columnas que no contabilizé, como fecha de nacimiento,
FirstName y LastName. Por favor, siga adelante y
agréguelos a la base de datos. Se está agregando esa columna a
la tabla de usuarios de ASP NET. Esas columnas. Cuando hago la actualización,
termina con éxito. Y luego si miro hacia atrás
mi idea de estar estable, después de una actualización rápida, sabré ver mis nuevos campos muy bien mostrados en la tabla de usuarios de
ASP NET. Nombre, apellido
y fecha de nacimiento. Así es como puedes
extender tus clases cuando estás tratando con las operaciones relacionadas con
el usuario. Sólo para verlo, podríamos
haber extendido la regla de identidad. ¿ Y si las reglas
estables no tuvieran suficiente información o
tanta información como te hubiera gustado. Todo lo que tiene es un ID de usuario. Lo siento, esa es la equivocada. Tú roles, roles que son hace reglas ha nombrado nombre
normalizado, sistema de órganos
crónicos. No sé qué más
probablemente querrías agregarle,
pero solo te estoy mostrando que de
la misma manera podemos extender el usuario de la
aplicación
por la herencia y luego usarlo en su lugar. Off es de la misma manera que
se pueden extender roles o cualquier cosa que tenga la identidad del prefijo más o
menos delante de él. Entonces todo lo que hemos hecho
es solo configuración. Cuando volvamos veremos
cómo podemos configurar nuestra página de registro
y dejar que los usuarios accedan.
32. Configuración de la página de registro: Chicos, bienvenidos de vuelta. La
última vez que estuvimos aquí, estábamos hablando de
realmente dejar que los usuarios se registren y
que los iniciaran sesión. Así que sólo voy a colapsar todo lo que vamos
a abrocharnos o a qué proyecto voy
a cerrar todas las pestañas que no se necesitan directamente. Y dentro de nuestra app, puedo hacer clic derecho, ir a Agregar. Y voy a ver
nuevo artículo regañado. Ahora bajo este cuadro de diálogo, verás que hay una
categoría que dice identidad. Cuando haga doble clic en Identidad, lo hará es que va a chequear. Y luego
pasa a evolucionar hacia la pantalla donde
dice Agregar identidad. Puedes anular todos los archivos. Entonces la cosa es
que cuando obtienes el archivo de plantilla es
en realidad una especie de, simplemente
están algo
escondidos de ti porque ninguna parte vimos ninguna página de inicio de sesión o registro,
están algo escondidos. Pero cuando
queremos sobrescribirlos, podemos decir fácilmente
que queremos anular como o podemos cereza escoger
los que queremos anular. En esta situación,
me gustaría anular la página de
registro y el contexto que debe
ser relativo a su auto reservando hasta el contexto DB. No necesito
agregar la clase de usuario ni nada más por no, todo lo que quiero es el registro. Y luego puede
seguir adelante y golpear Agregar. Tomará un tiempo
hacer el andamio. Por supuesto. Cuando se hace,
obtenemos este archivo README. ¿ De acuerdo? Realmente no necesitamos
eso, pero si miras, verás que tenemos una
nueva carpeta llamada areas. Y si profundizas, ves páginas de
identidad y luego
obtienes algunos nuevos votantes. No hagas este archivo de registro. Y si te das cuenta, esta también
es una página de Razor. Por defecto, estos uber es un PHS independientemente de la
temperatura del proyecto que utilice. Entonces veamos qué
registro nos da el CSS. Html5 nos da un formulario
donde obtenemos una entrada para correo electrónico en senderos donde querían
confirmar la contraseña. Sabemos que tenemos otros
campos que necesitamos, por lo que siempre podemos extender
esto como sea necesario. En el código de registro detrás de él, notarás que
se está inyectando. Sí, nos pide
el contexto DB, pero observe que no está
inyectando un contexto DB. En cambio se está inyectando
lo que lo llamamos gestor de
inicio de sesión y
un gestor de usuarios. Son relativos al usuario de
la aplicación. Sólo te estoy mostrando que
todo está conectado. El razonamiento para ver usuario de
la aplicación y no usuario de identidad
está en el inicio. Nosotros le dijimos que cuando
añades identidad, cualquier cosa relacionada con la identidad,
usa usuarios de aplicaciones. Por lo que ningún
código degenerado sabe que
no es el voltaje de usuario de identidad
es usuario de la aplicación. Observe que esto no dio una flecha porque podrían
usarse indistintamente. No obstante, no voy a ir en
contra del código generado y mirar el hecho de
que tenemos el gestor de
inicio de sesión así
como el gestor de usuarios. Por lo que estas son
bibliotecas integradas que nos da la biblioteca central de identidad. Eso es lo más bajo, el
mango de firma de
operaciones relacionadas y cualquier cosa
básicamente operada por el usuario consigue relacionado con el usuario, lo siento, operaciones,
conseguir un usuario, cambiar algo
sobre el usuario, etc. Entonces todo aquí está siendo inyectado y verás que
hay un remitente de correo electrónico. Aún no hemos implementado ningún servicio de
correo electrónico. Esto es realmente sólo
un titular del lugar que se puede sobrescribir más adelante. También obtenemos el registrador de ojos, que es relativo a
la página en la que estamos. Si te das cuenta en la parte superior tenemos este atributo que es
su permitir anónimo. Entonces nos fijamos más en
los atributos más adelante cuando estamos
discutiendo cómo podemos permitir que Auth0 autenticado
frente a ciertas partes de la aplicación
versus cómo podemos bloquear ciertas partes
del aplicación. Así que sigamos adelante. En este modelo que
se generó para nosotros, se ve que tenemos comprando
propiedad por encima de esta entrada. Entonces este es un patrón
que hemos visto antes. Si miramos en nuestras páginas, vemos que para el Create, habíamos hecho algo ya, generó algo parecido a esa propiedad sobre
todo el modelo llamado auto. No obstante, en esta situación, notarás que el modelo es en
realidad el monitor de entrada está definido
aquí dentro de la página, una clase dentro de nosotros patrones de buff
ugandés, pero solo los estoy mostrando a ti que a pesar de que se ve
ligeramente diferente, es
lo mismo. Tendrás una clase. Y esta clase tiene los mismos atributos que
habíamos puesto requeridos. Esta es la dirección de anemia, este es un nombre para mostrar que
queremos habíamos usado todos los antes y es sólo una propiedad llamada email donde ver
algunos otros, pero son las mismas cosas. Tenemos la verificación de
longitud de cadena y esta es una contraseña, y luego esta está diciendo que es una contraseña y debe compararse con contraseña arriba arriba y mostrar ese mensaje de error
si no coinciden. Eso es todo. Por eso solo tenemos tres
campos en el modelo de entrada, que se está utilizando en el formulario. Es por eso que el
formulario es vinculante a entrada de correo electrónico
dot input dot pass o ella. Punto de entrada confirmar la contraseña. Entonces fuera
de todo eso y conseguir, solo
toma una URL de retorno, podemos deshacernos de algunas de
estas líneas de código como esta, inicios de sesión
externos y así sucesivamente. No necesariamente los necesitamos. Al menos no los vamos
a estar
configurando en el ámbito de este curso. Pero después de que se presente el formulario, aquí
vemos que si el estado
modelo
es válido, es válido es relativo
, una vez más, todos estos atributos arriba. Creamos un nuevo
usuario de la aplicación pasando a detalles provenientes del formulario y nombre de usuario y dirección de correo electrónico. Y luego creamos. Entonces aquí está nuestro gestor de usuarios. Dot create Async, un nuevo usuario usando la contraseña
que se ingresó. ¿ Conocer B2B o
contraseñas sin importancia es que nunca almacenas contraseñas en
texto sin formato en la base de datos? Sí, el usuario sólo puede escribir
la palabra cuando estás escribiendo en pastor es
el único tipo en las palabras y los números
como los conoces. No obstante, si fueras a ver lo que se almacenaba
en una base de datos, nunca
deberías reconocerlo nunca. Es decir, Esa es la defensa
número uno contra los hackers. Hash tus contraseñas. Conoce lo bueno de estas bibliotecas que al
llamar a este método, todo eso se hace por
ti detrás de escena. Por lo que en realidad
ni siquiera tienes que preocuparte por la seguridad del almacenamiento de
contraseñas una vez que usas este
método para crear el registro de usuario y darles la contraseña tal y como
ingresó el usuario. Si la persona fue creada
con éxito, usted acaba de registrar eso y
luego generamos el código. Entonces cuando hablemos de confirme tu dirección de correo electrónico y te
enviaremos el correo electrónico. Este es el código que
genera ese tipo de conversación detrás de la consulta LINQ
está vinculado para confirmar. Muy bien, así que por favor confirme sus conos haciendo clic aquí. Así es como se ve ese
correo electrónico de confirmación. Una vez más, no tenemos ningún servicio
inmunológico funcionando, ¿verdad? Y también podemos pasar por alto
ese bit por no. Y luego dicen si, y luego aquí está,
requieren cuenta confirmada. ¿ Eso se ve familiar? Porque recuerda cuando lo
configuramos núcleo de identidad, dijimos que no, no tenemos que requerirlo. Aquí. Estamos viendo si las opciones
decían que debería ser requerida. Después leemos en la página de confirmación de
registro, que es como
una página de shell para fingir como si estuviera
haciendo clic aquí en el mismo enlace. De lo contrario, basta
con seguir adelante y firmarlos. Entonces eso es lo que está
firmando asíncrono es cuatro. Entonces obtenemos todos los errores. Si no pudo crear al usuario, obtenemos los errores y
luego los enviamos de vuelta en el estado del modelo a la
página. Eso tiene múltiplo. Solo quería que
entiendas lo que
está haciendo este código porque
puede parecer abrumador, pero tenemos que
prestarle atención. Verás que todas
las variables,
todo el código está escrito de
tal manera que si
acabas de leerlo,en tal manera que si
acabas de leerlo, realidad
puedes
seguir junto con
lo que está sucediendo en cada punto. Pongámonos a prueba o una página
de distribución. Lo que haré en nuestra página de maquetación
compartida. Oh, me di cuenta de que también
tenemos este login parcial. Extrañar ese punto. Este inicio de sesión parcial vino con
la actividad de andamios y este login PowerShell
tiene la herramienta de enlaces. Ver aquí es
registrarse o iniciar sesión. Iniciar sesión parcial es en realidad
solo darnos los enlaces que necesitamos para el inicio de sesión o registro. Y si estuvimos iniciados sesión, dirá hola, usuario
iniciado sesión. Y por favor cierre la sesión. Lo que voy a hacer en el diseño se utiliza ese parcial en la barra de navegación. Ir al interior de este div
que ya tiene la barra de navegación. Y todo lo que tenemos que hacer es
complacer la intrusión
parcial, nombre parcial igual a
login parcial. Muy bien, debajo de
eso, se seccionará. Vamos a decir esto
para un control de giro. Si lo primero se acuerda
me es una era de embarcaciones, no hay tipos de servicio que
como un error de inyección. Y es soluble a
gestor de firma para
usuario de aplicación saber que el
gestor de inicio de sesión se está utilizando en
el parcial para iniciar sesión. Se dice que esto no
ha sido registrado. Saber volver a la startup, lo que he ido a hacer es modificar la biblioteca o la
función que estoy usando aquí, estoy usando el núcleo de identidad AAD. Pero si acabo de escribir
identidades o CDF, Identity versus AD
Identity core yoduro
en TTX dos parámetros de tipo, y lo configura como
la identidad predeterminada, mientras que los
conjuntos de núcleo de identidad de ciertos cosas. Pero creo que lo que pasa es que
con núcleo de identidad, hay
que registrar
su lista de identidad a la carta con
solo registrarlo todo. Mientras que con identidad
donde tengo que decir, bueno, el núcleo de identidad de la USU y
también quiero este servicio y que, ese servicio, en lugar
de complicado en la configuración, sólo
voy a Tick identity core y use AD Identity también sacó la
línea que agregó las reglas porque la
entidad yoduro quiere un usuario
y nuestro tipo de rol en
los corchetes de tipo. Entonces así es como
va a lucir. Esta línea no es ningún servicio
que agregó entidad t usuario. Entonces si nos fijamos en
los sobrecargados, algo de usuario tipo T y
algo de regla tipo T. Entonces al usuario
sería usuario de identidad, nuestro
usuario de aplicación en este caso. Y fila de identidad para
la regla t de tipo. Con todo eso hecho, déjame controlar F5 e intentarlo de nuevo. No u obligación se está cargando. Y no sólo se está cargando, sabemos cómo la herramienta
enlaza en la barra de navegación. Entonces si hago clic en registrarse, no
es decirme
del remitente de correo electrónico ojo. Así que recuerda que dije que
estamos haciendo ese es un servicio que aún
no tenemos. Eso no es problema. Lo que voy a hacer no es inyectado, así que sólo voy
a sacarlo de la inyección aquí y
entrar en tote y lo
dejaré donde sea que se
esté utilizando, en ninguna parte. Voy a entrar en esos.
Entonces en cualquier lugar que se utilizaran
los objetos
del remitente de correo electrónico, solo comente que
le dijo para su uso posterior. Para que eso debería
resolver ese problema. Permítanme controlar de nuevo a F5. Y esta vez cuando voy
a inscribirme, funciona. Muy bien, así que ves aquí así es como se ve la
forma. Recibimos contraseña de correo electrónico, confirmamos contraseña, y luego algo sobre usar otro
servicio o registrarnos. Recuerda que tenemos este fichero, por lo que podemos modificar este
formulario de registro como queramos. Por ejemplo, quiero más
campos en su distribución. No quiero sólo la
dirección de correo electrónico y la contraseña. Sabemos lo
que es que tenemos nombre de usuario y hemos enviado un correo electrónico. Esos son dos campos diferentes. No obstante,
la forma en que
configura la marca ahora solo es
pedir un correo electrónico, pero lo usará tanto en los campos
EMEA como en el nombre de usuario. Depende de ti si quisieras
separarlos y si no, puedes dejarlo como está. No obstante, sí necesito que
se
añada
el nombre y el apellido a este formulario. Por lo que fui a saltar de nuevo
a mi formulario de registro y voy a
añadir más cuadros de texto. Entonces antes del correo electrónico, voy a poner en el punto
de entrada primer nombre. Entonces todo lo que hice fue copiar todo
el bloque para correo electrónico y buscaré
modificando formularios ya. Entonces esto debería ser algo
rudimentario para
ti en este punto. Solo estoy viendo gene,
otros adicionales que creé para FirstName y LastName multi-cell ellos
obteniendo esas líneas rojas porque FirstName y LastName no existen en el objeto de entrada. ¿ Qué es este objeto de entrada? Si Control clic y salto a su modelo
de entrada, ¿qué es el modelo de entrada? Modelo de entrada es lo que tenían definidos
estos campos? No puedo ver. Quiero que mi nombre, mi apellido sea aparte
del modelo de entrada. Nombre, LastName. Una vez más, nada especial. Voy a quitar o
cambiar los nombres para mostrar. No obstante, por supuesto,
el tipo de datos que estoy validando no es dirección de
correo electrónico para estos dos. Ahí vamos. Ahora nuestro modelo de entrada se
ha ampliado. Nombre, LastName,
y lo que sea LLC tad. También lo agregamos
al formulario y verás que
esas líneas rojas se han ido. No. Entonces todo el mundo
conoce su papel. Y entonces
lo final que voy a hacer es extender obligación usuario, pero no voy
a hacer eso. Quería al menos registrar alguien sin que entraran
los datos. Y luego verás cómo se ve cuando obtengamos los datos del carrito. Yo lo hice. Así que déjame controlar la actualización de nuevo. Saltar a mi registro y ya
ves conocer la fórmula
mostrando más temas. Entonces si pongo en todos
esos y voy a decir auto Booking.com, contraseña de
Booking.com. La contraseña, pero
la falla es estricta. Alguien a decir
mayúscula P al
decir, dice totalmente ya uno. Esa es la palabra de moda ahí
es para tus ojos. Y fui a usar esa contraseña de
confirmación. Si lo cambio, mira eso, la contraseña y la
confirmación no coinciden. Así que automáticamente estamos recibiendo
ese tipo de retroalimentación. Si pongo algo
inválido como dirección de correo electrónico e intento registrarme o hace algo direcciones de
correo electrónico no válidas. Discúlpate. Pero aquí estás
viendo que no tenemos usuario. Ciertas cosas están
fallando porque están esperando ciertas configuraciones
que simplemente no están ahí. Muy bien, eso no es problema. Como dije, como ves los
errores, los arreglamos. Entonces ese error se debe a que el generador
Tolkien que está siendo utilizado por el administrador de usuarios habría tenido que
configurarse desde el inicio. No estamos listos para. Eso me
encanta porque no estamos enviando el correo electrónico de todos modos. Fui a comentar,
eso es Alt también. Estoy seguro de que sólo ha
llegado aquí porque el usuario fue creado
con éxito. Entonces si miro en la base de datos
en ASP NET usuarios ver datos, verá que
el usuario fue creado admin en la tarjeta Booking.com. Esa no fue una dirección de correo electrónico
no válida. Entonces funcionó independientemente de
lo que veas aquí, mira la contraseña. Eso no se ve nada que la contraseña que te
mostré en pantalla. Solo sé que eso es hash
automático. No tenemos que
preocuparnos por nada de ese hashing. Pero si nota
la fecha de nacimiento, no se cumplimentaron
el
nombre y apellido. Fecha de nacimiento, obvia porque no
agregamos ese campo, pero FirstName y
LastName no fueron
cumplimentados a pesar de que proporcionamos datos. Entonces veamos cómo
podemos rectificar eso. En primer lugar, voy a
poner en el campo de fecha de nacimiento en el formulario. Y realmente no
importa de dónde
empieces a modificar desde que
consigas todas
las modificaciones hechas al final de la misma, entonces estás listo para
ir por fecha de nacimiento. Acabo de establecer el
tipo para que sea igual a la fecha para que podamos conseguir un selector de
fecha en ese campo. Entonces modelo de entrada. Vas a ser fecha
de nacimiento de tipo datetime. No voy a
hacer que sea requerido. Creo que debería
hacerlo requerido. Voy a hacer que sea
requerido porque va a tener un
valor predeterminado como hemos visto, que
realmente no queremos, ¿verdad? Por lo que todo se
requiere para que usted se registre con éxito
en este sitio web. Entonces después de que hayamos hecho todo eso, quiero que los campos
adicionales se almacenen en la base de datos. Fui a saltar hacia abajo
a donde dice, Si el estado moderno es válido, entonces crea un nuevo usuario, dando el nombre de usuario correo electrónico
y la dirección de correo electrónico. Puedo extender esto y ver
y querido primer nombre debe ser ingresado desde el
formulario punto primer nombre. Esto es algo que
hemos hecho antes. Construimos sobre lo que queremos. El apellido es igual al apellido
del punto de entrada. Y fecha de nacimiento es igual a fecha
de punto de entrada de
nacimiento. Ahí vamos. Después de hacer todo eso, lo que voy a hacer es probar, pero estoy viendo eso
de un aquí fácil porque creé fecha
de nacimiento como fecha. Pido disculpas, eso debió
haber sido en efecto tiempo. Por lo que ten en cuenta tenemos
dos cambios para mí del cambio lo que lobos
en la base de datos. Después de que andamios ese
campo en la base de datos. Y tenemos que ser
atentos a eso. Pero creo que todavía podemos
pasar por esta operación porque la base de datos
sólo debería convertir eso a una cadena de todos modos cuando la reciba. Así que intentemos esto de nuevo. Vamos a saltar para registrarnos y Tyrone Cooper cambia eso hoy. Para editar tus ys
son razones de prueba. Lo dejo y
usaré mi contraseña al decir una o simplemente
usar algo. Nacimiento 123, no hay problema
que estaba en mi portapapeles. Así que sólo voy a reutilizar eso. Hacemos clic en Registrarse. Vale, los analizadores deben
tener al menos uno. Por lo que ves esa es la fortaleza de la
contraseña en el trabajo. Por eso dije p al
firmar una sístole o D1, reutilizar ese click Registrarse. Están diciendo que
no coinciden. Así que permítanme volver a intentarlo. Regístrese. Ahí vamos. Entonces no, incluso
me está preguntando si quería ver si la contraseña solo ve si
podemos movernos más rápido. Pero ves registrarse e iniciar sesión
allí todavía no cambia porque todavía estamos
en proceso de desarrollo
de nuestra aplicación. No hay problema. Pero
al menos vemos que funcionó
un registro. Eso es uno. Lo pasaremos
sin errores. Y si vuelvo a buscar en la tabla de usuarios de ASP
NET, voy a ver que se han agregado
campos adicionales. Por lo que ahora voy a
ver mi fecha de nacimiento, el primer tema
y el apellido. Y todo está empezando
a unirse muy bien.
33. Configurar la página de inicio: Muy bien chicos, así que estamos haciendo estamos haciendo un buen progreso. El siguiente paso es
configurar la página de inicio de sesión. Estoy empezando
con esto arranca o porque todavía hay
algunas configuraciones. Ahora tiene que entrar.
Para nuestras cosas de inicio de sesión. Estamos hablando de lo que
llamamos autenticación. Autorización significa ¿
puedes hacer esto? Autenticación significa déjame
probar que eres quien eres. Cuando iniciamos sesión, es entonces cuando nos autenticamos. No obstante, lo que podemos hacer
después de firmar es, estamos autorizados para hacerlo? A pesar de que la caja
tenemos el middleware que se está utilizando ya para
autorizaciones están al tope de eso. Voy a añadir otra línea que diga usar autenticación. Esto es lo que realmente va
a dejar que ese gestor de inicio comience a trabajar de la manera que
queremos que funcione. Otra cosa que
queremos hacer es en los servicios de configuración y fue a decir servicios
dot add autorización. Para que sepamos que
ese servicio se está utilizando cada vez que se inicia una
aplicación. Entonces con todo eso hecho, configuremos nuestra página de inicio de sesión. Ahora, una vez más,
puedes configurar tu página de registro porque este es el formulario a un lado, solo
está ocupando cuatro espacios. Y luego tenemos este otro
div a los lados mixtos en ambas
opciones adicionales de inicio de sesión, bla, bla, bla. Eso es tomar seis.
Lo haría 66. Podría hacer uno más pequeño. Lo personaliza como desees. Por ahora deberías estar
lo suficientemente cómodo como para conocer un todo, para extender el formulario, sostenerme los botones
personalizar y cosas así. Entonces no voy a pasar
demasiado tiempo haciendo eso. Lo que queríamos hacer, sin embargo, es agregar la página de inicio de sesión. Puedo volver a hacer clic derecho en
áreas, hacer clic en Agregar, e ir por un nuevo manchado
en el elemento, haga clic en identidad. Y después de que recopila toda
la información que necesita, nos
va a dar
este cuadro de diálogo que nos
permite simular
dónde está login. Ahí vamos. Entonces
tenemos esa página de inicio de sesión. Sólo voy a tomar
el logo pH también login. Contamos con logotipos. Y una vez más,
tienes una serie de páginas, has cambiado de ruta
o la contraseña olvidada. Puede implementar una serie
de cosas y mucho
del código fuera de la caja
es bastante resistente. No obstante, solo me estoy
centrando en los que son absolutamente necesarios para
superar lo que necesitamos
para pasar. Iniciar sesión y cerrar sesión. Nuevamente, nuestro contexto DB es
la clase contextual de base de datos, y luego seguimos
adelante y pulsamos Agregar. Cuando se realiza esa operación
, reabre el andamio. Léame, pero luego vemos que tenemos las páginas de inicio de sesión y cierre de sesión. Entonces veamos primero el logo. ¿ Por qué tomé un logo pH? Bueno, todo esto
va a hacer es decir, si el usuario que está
aquí está autenticado, entonces aunque ellos
para hacer clic en logotipos, ¿qué pasa con el
logo nucleico cuando hacen eso? Lo mismo en Administrador log salt
y luego vuelve a la URL. Eso es lo que hace la página del logotipo. La página de inicio de sesión,
Es una forma sencilla. Dame tu email, dame tu contraseña. ¿ Y quieres
que te recuerde? Si no, bueno,
si no lo haces. Déjame seguir adelante e iniciar sesión. Se está
generando automáticamente enlaces para Olvidé contraseña. No lo vimos
en ese expediente y no necesariamente
vamos a implementarlo. No, eso está bien. Pero olvidaste tu
contraseña registrarte
como usuario son confirmación de
correo electrónico reciente. Entonces todas esas cosas así
como esta siguiente sección
a la derecha, ¿qué tal opciones alternativas de inicio de
sesión? Todas esas cosas
vinieron de esta forma. Entonces el código de inicio de sesión detrás es
muy similar al registro. Cualquiera de los permiten anónimos, personas
bajas que no están
autenticadas para llegar al discurso. Entonces tenemos inyecciones para nuestro gestor de usuarios e
iniciar sesión Gerente. Tenemos el mismo tipo de
formato con el modelo de entrada. Y el modelo de entrada
se está utilizando aquí para simplemente quedarse el correo electrónico y la contraseña
y establece aparte recordarme, On get, solo cargamos
la página más o menos así es inicios de sesión
externos simultáneos. No necesariamente
necesitamos prestar atención a eso en este ámbito
de este curso. Pero al hacer clic en Iniciar sesión, veamos qué pasa
si todo es válido. Vamos y pedimos al
administrador de inicio de sesión que inicie sesión usando la contraseña dada
la dirección de correo electrónico, la contraseña proporcionada. Si la persona dijo Recuérdame. Y si tenemos local habilitado, local significa que si después de
unos intentos fallidos, deberían cerrar tu condado, estoy seguro que te has
encontrado con eso. Todo eso está incorporado, en esta biblioteca muy poderosa. Este curso no es tiempo
suficiente para
pasar por todas las
capacidades de esta biblioteca. Por eso me estoy
enfocando en las
cosas grandes, más grandes y más importantes en este momento, ¿verdad? Después de que tratamos de decir si
fue un inicio de sesión exitoso, entonces leemos Erich,
la URL de retorno. De lo contrario, verificamos si lo es, si requiere
autenticación de dos factores y saltamos esa interacción. No tenemos eso implementado. Si el usuario está bloqueado totes, los
leemos que no
tenemos eso implementado. Y si todo lo demás falla, entonces regresamos con
el error del modelo, viendo el punto de cadena
vacío como la clave. Fue un
intento de inicio de sesión inválido y volvemos a pH. Si llega tan lejos, significa que no funcionó. Agradable y sencillo. Así que sigamos
adelante y probemos o iniciemos sesión. Ahora ya tenemos
algunos usos creados. Estoy seguro que tú y locos
registrando a un número de usuarios desde que consiguió el registro
para trabajar y ya ves, tenía un letrero, no solo lo
sabía, acabo de cerrar la sesión. Así que probemos esto no login. Llegamos a la página de inicio de sesión. Genial. Yo sí dije que era admin
en coche Booking.com. Permítanme creo que debería tener
un cuatro al final de la misma, pero déjame intentar iniciar sesión. Y vas a ver
que dice login no válido, intente comprobar la base de datos. No encontró esa
combinación de nombre de usuario o correo electrónico y contraseña en absoluto. Permítanme poner en lo
que creo que el correo electrónico adverso fue pesar de que nuestros propósitos solo hacen uno mejor
para dejar de compartir de nuevo. Pero déjame intentarlo de nuevo. Haga clic en Iniciar sesión. No, estoy
viendo algo más. Estoy consiguiendo que estos datos
del tablero de errores sean nulos. Muy bien, así que
entré en modo de depuración y volví a ejecutar esa operación. Y este es el
error que estoy recibiendo, lo que tiene un poco más de sentido. Y creo que se está
quejando de esto porque cambiamos fecha de nacimiento,
fecha y hora, pero las
herramientas de base de datos piensan que se encoge. Entonces esa es una solución fácil. Simplemente agregue una migración, cambiado DOB al tipo de fecha. Que haga la migración. migración es la columna de ruido TEN
y alter para ese campo que en ese,
por lo que actualizar la base de datos. Está viendo que fracasó porque no
estoy permitiendo nulls. Entonces recuerda
toda esa conversación sobre tipos de datos y
notas. Eso está bien. No voy a
presionar demasiado lo que voy a hacer
ya que todavía estamos en fase experimental. Y puedes hacer a cualquier
usuario que hayas creado. Simplemente encuéntralos a todos. Eliminar. Muy bien, en este punto, eso es importante, por eso están ahí y por
lo tanto pruebas. Entonces estoy eliminando a todos los usuarios creados
actualmente y luego solo
voy a volver a ejecutar. Entonces a veces no tienes
el lujo de hacer eso. Pero ya
miramos cómo puedes dar pasos cuando no puedes eliminar todos los registros que
ya tienes cuando querías
hacer tal cambio. Entonces de todos modos, la actualización
fue exitosa esta vez. Así que déjame sólo Controlar
F5 e intentar esto de nuevo. Me fui tras registrarme primero y lo haré
correctamente esta vez. Entonces fecha de nacimiento. Apenas hacer hoy admin,
coche Booking.com. Esa es la palabra de moda después confirmar esta contraseña
solo para tus ojos, esa es la contraseña. Y luego hacemos clic en Registrarse. Sabe, voy a
guardar la contraseña y mirar ese hola
Admin, no carbocation. Sepa que incluimos el anuncio. Todos usan la autenticación y el servicio para la
autorización AT en el inicio, realidad
empezamos a ver los cambios en la interfaz de
usuario. Así que déjame cerrar sesión y
voy a iniciar sesión ahora. Voy a usar el mismo admin, una reserva de auto, misma contraseña, click Iniciar sesión y miré eso. Estamos conectados. Logotipo funciona también. Ya ves, ahí acabamos de
resolver ese problema. Por lo que ahora hemos arreglado el
problema de registro en el futuro. No deberías tener
ninguno de esos programas. Nuevamente, sabemos cómo iniciar
sesión y cerrar sesión a voluntad. Lo siguiente
sería ¿cómo
evitamos que los usuarios que no están conectados lleguen
a estas páginas? Porque en este punto, iniciar sesión no
hace ninguna diferencia. Puedo ir a cualquier parte
de la aplicación. Sin iniciar sesión. Tenemos que mirar cómo
podemos atarlo en nuestros bloqueos, acceso a ciertas partes de la aplicación para usuarios
no autenticados.
34. Autorización de configuración: En esta lección, estamos
hablando de todo el fin de semana restringir el acceso a diferentes partes de nuestra aplicación para usuarios auténticos, autenticados y sobre
autorizados y viceversa. Ahora esto suena más
difícil de lo que realmente es. Y te voy a mostrar lo fácil que es lograr esto. No, sí tenemos funcionalidad de inicio de sesión y registro
abierta corriendo, pero necesitamos
poder administrar estas páginas. Entonces cualquiera debería poder llegar cómodamente
a la página de inicio. Pero si hacen clic en autos, les debe obligar a iniciar sesión antes de que puedan proceder a
mirar los autos y
fácilmente a hacerse. Y es de manera muy fácil. Permítanme simplemente cerrar
todas las pestañas que
no son importantes en este punto
y colapsar nada. Si no quiero que puedas llegar a la lista de autos. Todo lo que tengo que hacer está por encima
del código de página para los autos. Agregue un atributo que diga autorizar la
declaración de uso que falta. Eso es todo. Te dije que sería sencillo. Entonces echemos un
vistazo a cómo funciona eso. Por lo que esto está por encima de la página de índice
para autos
que sí autorizo, lo que significa que no
debería
poder en un estado no autenticado, click en autos y ver
la lista de tarjetas. Mira, mira lo que
pasa cuando hago clic en autos va a, vale, bueno, vale, esto
es anticlimáctico, pero ya ves que no se está
comportando correctamente. En realidad está tratando de
llegar a la pantalla de inicio de sesión. Ahora voy a saltar de nuevo
a la aplicación, y sospecho firmemente
que voy a tener que cambiar mi configuración. Nuevamente. Éstos son los de
nuevo, esto de ida y vuelta. Es bueno porque cuando
ves este tipo de flechas, te ayuda a inferir dónde necesitas ir para
resolver estos problemas. Cuando agregamos servicios, recuerda que primero
agregamos núcleo de identidad, y luego vimos que no venía con ciertas
cosas fuera de la caja, razón por la
que
lo cambiamos a identidad. Esas cosas con las que no
funcionaron bien. Fuera de la caja comenzó a trabajar en ninguna parte viendo
otra cosa. El tema con la flecha que
acabamos de ver es que está
buscando la página de inicio de sesión en una determinada ubicación
que no existe. Eso se debe a que
las identidades sólo van a decir mirar en esa ubicación. No obstante, me
gustaría que mirara en la ubicación predeterminada
basada en el andamiaje. Entonces no quiero hacer muchas
configuraciones y alterar cambiar el flujo normal
de la aplicación. Por esa razón, puedo, en lugar de usar el núcleo de identidad
o identidad, puedo usar la identidad predeterminada. Si nos fijamos en
éste, dice agrega un sentido de servicios de identidad
comunes
a la aplicación, incluyendo nuestra interfaz de usuario predeterminada, que sería donde
tenemos andamios nuestras cosas. Esa es la ubicación predeterminada. Proveedores de tokens. Recuerda, completa cuando
estamos registrando nuestro barco, todo
el proveedor de tokens y camina por la teacup o un juguete, falta y
tenemos que incluirlo. Se incluye automáticamente con las opciones predeterminadas y configura la autenticación
para usar cookies. Eso es lo que voy a
hacer. Agregar identidad predeterminada. No, estoy recibiendo este error
porque había predeterminado entidad en similar a las
palabras clave de identidad solo toma t usuario, lo que significa que tengo que bajar
manualmente aquí y ver agregar reglas. Nuevamente. Agrega reglas, y luego
le damos la regla de identidad. Déjame ponerlo entre paréntesis. Ahí vamos adelante, regla de
entidad, cerrar. No, estamos usando la
biblioteca predeterminada para la identidad. Y éste, como dije, va a incluir
ciertos impagos, Alt fuera de la caja que otras
cosas no necesariamente lo hicieron. Tomemos otra puñalada en este experimento fue que hemos agregado autorizado
el discurso del auto. No debería poder navegar por ahí sin haber
iniciado sesión antes. Entonces si hago clic en autos,
mira eso, es simplemente
redireccionarme automáticamente a la página de inicio de sesión. Entonces, debido a que no
teníamos el valor predeterminado, no estaba buscando en
la ubicación predeterminada de la carpeta de identidad para
encontrar los iconos e iniciar sesión. Entonces eso en realidad
omitió esa parte, razón por la
que conseguimos esta página. Nunca te mostraré algo o codifica un error sin explicar por qué
lo conseguimos y cómo lo arreglamos. Así que ahora que estamos
en la página de inicio de sesión, vamos a asegurarnos de que esa es
nuestra funcionalidad de inicio de sesión todavía funciona. Sí, lo hace. Aquí está nuestro hola y no, no
podemos ver la página, así que en ninguna parte autenticados y estamos autorizados
a ver la página. Sería un poco tedioso
aunque decir, Bueno, bueno, después del bloqueo para editar y
los detalles y el Delete, porque en este punto, si quisiera editar un auto y me acordé de la URL
para editar nuestro auto. A ver, no estoy
autorizado y voy a autos y no autorizado. ¿ Qué es lo que estaba parado sobre el hombro de
alguien
mientras estaba? Editando nuestro auto y
recuerdo la URL. En realidad puedo simplemente poner
en esa URL y omitir toda
la autorización para llegar a editar auto, lo cual está mal. En ese punto,
tendría que agregar el
atributo autorizar sobre cada página que quiero
dejarlos configurados para hacer, para crear, tendría que
hacer dos detalles más. Edita que
cada uno de ellos, que no es necesariamente, me refiero a que funciona y puede ser práctico en una
pequeña aplicación. Pero para mí, sólo se
cansará fácilmente. Y es fácil para
alguien olvidar
colocar ese código
por encima del código pH. Lo que podemos hacer es
hacerlo a nivel global. En nuestra startup Weekend, agrega este bit de código o
agrega un área de páginas Razor. posible que veas
código variable entre cómo lo hace en las páginas de Razor y si alguna vez has
tenido que hacerlo en MVC, y como ves en un
montón, ya sabes, hay tantas maneras de
lograr lo mismo . Simplemente encuentra el
que funcione para usted y que sea lo mejor para su contexto. En esta situación,
todo lo que tiene que hacer es ver las arterias son páginas. Empieza a aplicar esa misma opción. Objeto a aceptar. Sólo lo estoy llamando o
en lugar de opciones. Entonces toda expresión lambda. Y en lugar de eso estoy
diciendo todas las convenciones de puntos, dot carpeta autorizada, aguanieve. Hay una serie de
cosas que puedes autorizar. Autorizar el área
se puede autorizar un día completo, puede autorizar una página específica. Si usted tiene tal vez una
página específica que desea tener reglas
específicas es diferente de los otros Phs o una
carpeta específica para jugar por diferentes, él puede agregar todos esos. Se llaman convenciones. Norma acaba de agregar una
convención global a cualquier cosa después una barra y ver que se
supone que debe ser autorizado. Por lo que esto va a ejecutar
automáticamente básicamente agregar ese filtro autorizado sobre cada página
en mi aplicación. La única forma de eludirlo es agregando o permitiendo el anonimato. Entonces te voy a
mostrar eso ahora mismo. Entonces si elimino eso
autorizado de la página de autos y un
Control F5, déjalo correr. Vas a ver que
debería haber aterrizado
en la página de inicio. Necesita que me identifique
si traté de ir a mezclar, quiere que
lo firme
sin importar a dónde vaya, tengo que iniciar sesión. Pero entonces si voy a registrarme, me
permite ver la página de
redistribución. Eso se debe a que el
filtro llamado bajo anónimo está por encima de la predica del
registro, ¿verdad? Entonces si salto y
miro ya tienda, verás un bajo
anónimo por encima de él. Entonces si agrego eso a, veamos, página de índice regular. Recuerda que empezamos con nuestra página de índice
donde teníamos toda nuestra maravillosa cotización de clase div web
más básica. Si quisiera que el usuario a Londres, al
menos la página de inicio
sin ninguna mantequilla. Pero en todas partes
necesitan firmar, entonces todo lo que tengo que hacer
es decir permitir anonimato. Entonces al hacer eso, si refresco y voy a la página
de inicio,
la página de inicio renderizará solo
porque dije hola Anónimo. No obstante, si traté de ir a
autos, no puedo llegar allí. Si traté de escribir
una URL directa a autos slash edit
con el ID 14. Tengo que iniciar sesión sin
importar lo que haga, tampoco
puedo ir a ninguna parte, ¿verdad? Sin privacidad. Quiere que inicie sesión
para rectificar eso. Sólo necesito ir por encima privacidad y permitir el acceso
anónimo. De repente
le hace clic en Privacidad. En realidad
me traerá a la página de privacidad porque personas anónimas
son capaces de verla. Si inicio sesión y luego lo
intento de nuevo, entonces está bien, páginas de inicio, buenos autos, y todo lo demás está
disponible para su visualización. Entonces así es básicamente
como podemos bloquear o aplicar y restringir acceso
no deseado a áreas
sensibles.
35. Añadir autorización: Muy bien chicos, así que creo que
hemos hecho un buen trabajo de asegurar nuestra aplicación
hasta este punto, hemos configurado con éxito el registro y el login, y hay mucho
más que podemos hacer. Podríamos meternos en roles, podríamos meternos en restringir a los usuarios en base a ciertas
políticas y reclamos. Hay tanto, tantas cosas que podríamos hacer. Pero tristemente, no quiero abrumarte con
toda la información y todos los escenarios y así sucesivamente. Es mejor absorber tanto NO y
experimentar con él. Y luego puedes ampliar
tus conocimientos como necesites. Por ahora, sólo podemos hacer una revisión rápida de
lo que implementamos. Empezando por nuestro usuario de identidad, la clase de usuario de la aplicación. Cuando estábamos configurando
nuestra biblioteca de identidad. En este proyecto,
tuvimos que heredar herencia
cursi para el contexto DB del contexto de identidad DB. Y luego lo configuramos
para heredar basado en el contexto del usuario de la aplicación. El usuario de la aplicación fue
nuestra clase personalizada que nos encontramos para heredar
del usuario de identidad, donde ponemos en campos
adicionales que extenderían la
tabla de usuarios en la base de datos. Hasta ahora no
escribimos ningún código personalizado para manejar la creación del usuario o hash de la contraseña o
incluso las capacidades de inicio de sesión. Todas esas cosas nos fueron
entregadas fuera de la caja. Y el ancho, el margen de maniobra que pudimos
modificarlos fuera de curso. Entonces después de hacer todo eso, andamiamos los cambios
con unas migraciones, tuvimos algunas migraciones de campo
ser algunos cambios, pero pasamos por todo eso. Y luego nos aseguramos de que
configuramos la identidad en
nuestra aplicación web, cual también
pasamos por ciclos de identidad versus núcleo de identidad
versus identidad predeterminada de AD, que es el que
nosotros dijo que Louis, porque venía con las bibliotecas más preempaquetadas basadas en lo que tenemos que hacer. Entonces después de hacer todo eso, seguimos adelante e hicimos
nuestras interfaces de usuario, modificamos algunas de ellas. Para el registro. Teníamos los comentarios,
pensamientos, todo el código porque no era necesariamente aplicable
a nuestro alcance actual. Por lo que eliminamos parte de ese código. Ponemos en las funciones y páginas de inicio de
sesión y cierre de sesión. También obtuvimos un login cortesía
parcial del andamio que
agregamos a nuestra página de diseño, lo que nos da acceso a los enlaces de
registro e inicio de sesión. Ahora con todo eso hecho, balas
Zoom son buenos cambios. Y ver que agregamos inicio de sesión y funcionalidad
a nuestra aplicación. Nuestros compañeros de equipo saben
exactamente qué
esperar cuando obtienen
el código más reciente. Entonces sí inicié sesión y
agregé funcionalidad y luego simplemente
comprometemos todo y hundimos. Eso es todo para esta sección.