Uso de valores de cadena de consulta para filtrar datos con vinculación de modelos y formularios web

por Tom FitzMacken

En esta serie de tutoriales se muestran aspectos básicos del uso del enlace de modelos con un proyecto de web Forms de ASP.NET. 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.

Lo que vas a desarrollar

En este tutorial, hará lo siguiente:

  1. Agregar una nueva página para mostrar los cursos inscritos para un alumno
  2. Recuperar los cursos inscritos para el alumno seleccionado en función de un valor de la cadena de consulta
  3. Agregar 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.

Agregar 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 Courses.

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, añadirás el método de selección con el nombre especificado en la propiedad SelectMethod del GridView. 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 declaraciones using.

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

A continuación, agregue el código siguiente 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 vincule a su nueva página de 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.

Agregar hipervínculo

Al hacer clic en uno de los vínculos, verá los cursos en los que el alumno está inscrito.

mostrar cursos

Conclusión

En este tutorial, ha agregado un enlace con un valor de cadena de consulta. Usaste ese valor de la cadena de consulta como el valor para el 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.