Uso de valores de cadena de consulta para filtrar datos con formularios web y enlace de modelos

por Tom FitzMacken

En esta serie de tutoriales, se muestran aspectos básicos del uso del enlace de modelos con un proyecto de ASP.NET Web Forms. El enlace de modelos hace que la interacción de datos sea más sencilla que tratar con objetos de origen de datos (como ObjectDataSource o SqlDataSource). Esta serie comienza con material introductorio y pasa a conceptos más avanzados en tutoriales posteriores.

En este tutorial se muestra cómo pasar un valor en la cadena de consulta y usar ese valor para recuperar datos a través del enlace de modelos.

Este tutorial se basa en el proyecto creado en las partes anteriores de la serie.

Puede descargar el proyecto completo en C# o VB. El código descargable funciona con Visual Studio 2012 o Visual Studio 2013. Usa la plantilla de Visual Studio 2012, que es ligeramente diferente de la plantilla de Visual Studio 2013 que se muestra en este tutorial.

Qué va a crear

En este tutorial, hará lo siguiente:

  1. Adición de una nueva página para mostrar los cursos inscritos de un alumno
  2. Recuperación de los cursos inscritos del alumno seleccionado en función de un valor de la cadena de consulta
  3. Adición de un hipervínculo con un valor de cadena de consulta desde la vista de cuadrícula a la nueva página

Los pasos de este tutorial son bastante similares a lo que hizo en el tutorial anterior para filtrar los alumnos mostrados en función de la selección de usuario en una lista desplegable. En ese tutorial, ha usado el atributo Control en el método select para especificar que el valor del parámetro procede de un control. En este tutorial, usará el atributo QueryString en el método select para especificar que el valor del parámetro procede de la cadena de consulta.

Adición de nueva página para mostrar los cursos de un alumno

Agregue un nuevo formulario web que use la página maestra Site.master y asigne un nombre a la página Cursos.

En el archivo Courses.aspx, agregue una vista de cuadrícula para mostrar los cursos del alumno seleccionado.

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <asp:GridView runat="server" ID="coursesGrid"
        ItemType="ContosoUniversityModelBinding.Models.Enrollment"
        SelectMethod="coursesGrid_GetData" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField HeaderText="Title" DataField="Course.Title" />
            <asp:BoundField HeaderText="Credits" DataField="Course.Credits" />
            <asp:BoundField HeaderText="Grade" DataField="Grade" />
        </Columns>
        <EmptyDataTemplate>
            <asp:Label Text="No Enrolled Courses" runat="server" />
        </EmptyDataTemplate>
    </asp:GridView>
</asp:Content>

Definición del método select

En Courses.aspx.cs, agregará el método select con el nombre especificado en la propiedad SelectMethod de la vista de cuadrícula. En ese método, definirá la consulta para recuperar los cursos de un alumno y especificará que el parámetro procede de un valor de cadena de consulta con el mismo nombre que el parámetro.

En primer lugar, debe agregar las siguientes instrucciones using.

using ContosoUniversityModelBinding.Models;
using System.Web.ModelBinding;
using System.Data.Entity;

A continuación, agregue el siguiente código a Courses.aspx.cs:

public IQueryable<Enrollment> coursesGrid_GetData([QueryString] int? studentID)
{
    SchoolContext db = new SchoolContext();
    var query = db.Enrollments.Include(e => e.Course)
        .Where(e => e.StudentID == studentID);
    return query;
}

El atributo QueryString significa que un valor de cadena de consulta denominado StudentID se asigna automáticamente al parámetro en este método.

En la vista de cuadrícula de Students.aspx, agregará un campo de hipervínculo que se vincula a la nueva página Cursos. El hipervínculo incluirá un valor de cadena de consulta con el identificador del alumno.

En Students.aspx, agregue el siguiente campo a las columnas de vista de cuadrícula justo debajo del campo Créditos totales.

<asp:TemplateField HeaderText="Total Credits">  
    <ItemTemplate>
        <asp:Label Text="<%# Item.Enrollments.Sum(en => en.Course.Credits) %>" 
            runat="server" />
    </ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField Text="Courses" DataNavigateUrlFormatString="~/Courses.aspx?StudentID={0}"
    DataNavigateUrlFields="StudentID" />

Ejecute la aplicación y observe que la vista de cuadrícula ahora incluye el vínculo Cursos.

Add hyperlink

Al hacer clic en uno de los vínculos, verá que los cursos inscritos del alumno.

show courses

Conclusión

En este tutorial, ha agregado un vínculo con un valor de cadena de consulta. Usó ese valor de cadena de consulta para el valor del parámetro en el método select.

En el siguiente tutorial, moverá el código de los archivos de código subyacente a una capa de lógica de negocios y a una capa de acceso a datos.