Documentos de Académico
Documentos de Profesional
Documentos de Cultura
C#Copiar
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
if (student == null)
{
return NotFound();
}
return View(student);
}
Datos de ruta
El valor de clave que se pasa al método Details procede de los datos de ruta. Los datos de ruta
son los que el enlazador de modelos encuentra en un segmento de la dirección URL. Por ejemplo,
la ruta predeterminada especifica los segmentos de controlador, acción e identificador:
C#Copiar
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
Copiar
http://localhost:1230/Instructor/Index/1?courseID=2021
Copiar
http://localhost:1230/Instructor/Index?id=1&CourseID=2021
En la página Index, las instrucciones de la aplicación auxiliar de etiquetas crean direcciones URL
de hipervínculo en la vista de Razor. En el siguiente código de Razor, el parámetro id coincide
con la ruta predeterminada, por lo que se agrega id a los datos de la ruta.
HTMLCopiar
<a asp-action="Edit" asp-route-id="@item.ID">Edit</a>
HTMLCopiar
<a href="/Students/Edit/6">Edit</a>
HTMLCopiar
<a asp-action="Edit" asp-route-studentID="@item.ID">Edit</a>
HTMLCopiar
<a href="/Students/Edit?studentID=6">Edit</a>
Instituto Superior Tecnológico
Para obtener más información sobre los asistentes de etiquetas, vea Asistentes de etiquetas en
ASP.NET Core.
CSHTMLCopiar
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.LastName)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.LastName)
</dd>
Después del último campo e inmediatamente antes de la etiqueta </dl> de cierre, agregue el
código siguiente para mostrar una lista de las inscripciones:
CSHTMLCopiar
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Enrollments)
</dt>
<dd class="col-sm-10">
<table class="table">
<tr>
<th>Course Title</th>
<th>Grade</th>
</tr>
@foreach (var item in Model.Enrollments)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Course.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Grade)
</td>
</tr>
}
</table>
</dd>
Este código recorre en bucle las entidades en la propiedad de navegación Enrollments. Para cada
inscripción, se muestra el título del curso y la calificación. El título del curso se recupera de la
Instituto Superior Tecnológico
C#Copiar
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(
[Bind("EnrollmentDate,FirstMidName,LastName")] Student student)
{
try
{
if (ModelState.IsValid)
{
_context.Add(student);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
}
catch (DbUpdateException /* ex */)
{
//Log the error (uncomment ex variable name and write a log.
ModelState.AddModelError("", "Unable to save changes. " +
"Try again, and if the problem persists " +
"see your system administrator.");
}
return View(student);
}
En este código se agrega la entidad Student creada por el enlazador de modelos de ASP.NET Core
MVC al conjunto de entidades Students y después se guardan los cambios en la base de datos. (El
enlazador de modelos se refiere a la funcionalidad de ASP.NET Core MVC que facilita trabajar
con datos enviados por un formulario; un enlazador de modelos convierte los valores de
formulario enviados en tipos CLR y los pasa al método de acción en parámetros. En este caso, el
enlazador de modelos crea instancias de una entidad Student mediante valores de propiedad de la
colección Form).
Se ha quitado ID del atributo Bind porque ID es el valor de clave principal que SQL Server
establecerá automáticamente cuando se inserte la fila. La entrada del usuario no establece el valor
ID.