Compartir a través de


DynamicRouteExpression Clase

Definición

Obtiene la clave principal de la información de enrutamiento para realizar el filtrado de datos.

public ref class DynamicRouteExpression : System::Web::UI::WebControls::Expressions::DataSourceExpression
public class DynamicRouteExpression : System.Web.UI.WebControls.Expressions.DataSourceExpression
type DynamicRouteExpression = class
    inherit DataSourceExpression
Public Class DynamicRouteExpression
Inherits DataSourceExpression
Herencia
DynamicRouteExpression

Ejemplos

Hay disponible un proyecto de Visual Studio con código fuente para acompañar a este tema: Scaffolding Dynamic Data (Aplicar scaffolding a datos dinámicos).

En el ejemplo siguiente se muestra una plantilla de página List.aspx personalizada para la tabla Products. Usa la ColumnName propiedad para especificar la clave externa ProductCategory para filtrar las filas Products.

La página List.aspx personalizada muestra una columna que contiene vínculos de las categorías contenidas en la columna de clave externa ProductCategory. Cuando el usuario hace clic en uno de estos vínculos, la página List.aspx muestra solo las filas que contienen la categoría seleccionada.

El ejemplo requiere lo siguiente:

<%@ Page Language="C#" MasterPageFile="~/Site.master" CodeFile="List.aspx.cs" Inherits="List" %>

<%@ Register src="~/DynamicData/Content/GridViewPager.ascx" tagname="GridViewPager" tagprefix="asp" %>

<asp:Content ID="headContent" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:DynamicDataManager ID="DynamicDataManager1" runat="server" AutoLoadForeignKeys="true">
        <DataControls>
            <asp:DataControlReference ControlID="GridView1" />
        </DataControls>
    </asp:DynamicDataManager>

   
    <h2 class="DDSubHeader">Using DynamicRouteExpression with <%= table.DisplayName%> table</h2>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <div class="DD">
                <asp:ValidationSummary ID="ValidationSummary1" runat="server" EnableClientScript="true"
                    HeaderText="List of validation errors" CssClass="DDValidator" />
                <asp:DynamicValidator runat="server" ID="GridViewValidator" ControlToValidate="GridView1" Display="None" CssClass="DDValidator" />
                <br /> <br />
          
                <div class="DDFilter"> 
                    <asp:HyperLink runat="server" ID="ViewAllLink" Text="View All Categories" />
                </div>
            
            </div>

            <asp:GridView ID="GridView1" runat="server" DataSourceID="GridDataSource" EnablePersistedSelection="true"
                AllowPaging="True" AllowSorting="True" CssClass="DDGridView"
                RowStyle-CssClass="td" HeaderStyle-CssClass="th" CellPadding="6">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:DynamicHyperLink runat="server" Action="Edit" Text="Edit"
                            /> <asp:LinkButton runat="server" CommandName="Delete" Text="Delete"
                                OnClientClick='return confirm("Are you sure you want to delete this item?");'
                            /> <asp:DynamicHyperLink runat="server" Text="Details" />
                            <!-- Create action link to filter items that
                            belong to the same category -->
                             <a ID="CategoryRouteID" runat="server" 
                                    href='<%# GetRouteInformation() %>'>
                                Filter By: <%# GetProductCategory() %>
                            </a>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>

                <PagerStyle CssClass="DDFooter"/>        
                <PagerTemplate>
                    <asp:GridViewPager runat="server" />
                </PagerTemplate>
                <EmptyDataTemplate>
                    There are currently no items in this table.
                </EmptyDataTemplate>
            </asp:GridView>

            <asp:LinqDataSource ID="GridDataSource" runat="server" EnableDelete="true" />
            
            <asp:QueryExtender TargetControlID="GridDataSource" ID="GridQueryExtender" runat="server">
                <asp:DynamicRouteExpression ColumnName="ProductCategory" />
            </asp:QueryExtender>

            <br />

            <div class="DDBottomHyperLink">
                <asp:DynamicHyperLink ID="InsertHyperLink" runat="server" Action="Insert"><img runat="server" src="~/DynamicData/Content/Images/plus.gif" alt="Insert new item" />Insert new item</asp:DynamicHyperLink>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>
<%@ Page Language="VB" MasterPageFile="~/Site.master" CodeFile="List.aspx.vb" Inherits="List" %>

<%@ Register src="~/DynamicData/Content/GridViewPager.ascx" tagname="GridViewPager" tagprefix="asp" %>

<asp:Content ID="headContent" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:DynamicDataManager ID="DynamicDataManager1" runat="server" AutoLoadForeignKeys="true">
        <DataControls>
            <asp:DataControlReference ControlID="GridView1" />
        </DataControls>
    </asp:DynamicDataManager>

    <h2 class="DDSubHeader"><%= table.DisplayName%></h2>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <div class="DD">
                <asp:ValidationSummary ID="ValidationSummary1" runat="server" EnableClientScript="true"
                    HeaderText="List of validation errors" CssClass="DDValidator" />
                <asp:DynamicValidator runat="server" ID="GridViewValidator" ControlToValidate="GridView1" Display="None" CssClass="DDValidator" />
            </div>

            <asp:GridView ID="GridView1" runat="server" DataSourceID="GridDataSource" EnablePersistedSelection="true"
                AllowPaging="True" AllowSorting="True" CssClass="DDGridView"
                RowStyle-CssClass="td" HeaderStyle-CssClass="th" CellPadding="6">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:DynamicHyperLink runat="server" Action="Edit" Text="Edit"
                            /> <asp:LinkButton runat="server" CommandName="Delete" Text="Delete"
                                OnClientClick='return confirm("Are you sure you want to delete this item?");'
                            /> <asp:DynamicHyperLink runat="server" Text="Details" />
                        
                            <!-- Create action link to filter items that
                            belong to the same category -->
                             <a ID="CategoryRouteID" runat="server" 
                                    href='<%# GetRouteInformation() %>'>
                                Filter By: <%# GetProductCategory() %>
                            </a>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>

                <PagerStyle CssClass="DDFooter"/>        
                <PagerTemplate>
                    <asp:GridViewPager runat="server" />
                </PagerTemplate>
                <EmptyDataTemplate>
                    There are currently no items in this table.
                </EmptyDataTemplate>
            </asp:GridView>

            <asp:LinqDataSource ID="GridDataSource" runat="server" EnableDelete="true" />
            
            <!-- Set the foreign-key to use for filtering -->
            <asp:QueryExtender TargetControlID="GridDataSource" ID="GridQueryExtender" runat="server">
                <asp:DynamicRouteExpression ColumnName="ProductCategory" />
            </asp:QueryExtender>

            <br />

            <div class="DDBottomHyperLink">
                <asp:DynamicHyperLink ID="InsertHyperLink" runat="server" Action="Insert"><img runat="server" src="~/DynamicData/Content/Images/plus.gif" alt="Insert new item" />Insert new item</asp:DynamicHyperLink>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>
// Create route information based on the
// foreign-key specified in the 
// DynamicRouteExpression page markup. 
protected string GetRouteInformation()
{

    // Retrieve the current data item.
    var productItem = (Product)GetDataItem();

    if (productItem != null)
    {

        RouteValueDictionary rvd = new RouteValueDictionary();
        rvd.Add("ProductCategoryID", productItem.ProductCategoryID );

        string routePath =
            table.GetActionPath(PageAction.List, rvd);

        return routePath;
    }

    return string.Empty;
}

// Get the name of the foreign-key category. 
protected string GetProductCategory()
{
    // Retrieves the current data item.
    var productItem = (Product)GetDataItem();

    if (productItem != null)
    {
        return productItem.ProductCategory.Name;
    }
    return string.Empty;
}
' Create route information based on the
' foreign-key specified in the 
' DynamicRouteExpression page markup. 
Protected Function GetRouteInformation() As String

    ' Retrieve the current data item.
    Dim productItem = CType(GetDataItem(), Product)

    If productItem IsNot Nothing Then

        Dim rvd As New RouteValueDictionary()
        rvd.Add("ProductCategoryID", productItem.ProductCategoryID)

        Dim routePath As String = table.GetActionPath(PageAction.List, rvd)

        Return routePath

    End If

    Return String.Empty
End Function

' Get the name of the foreign-key category. 
Protected Function GetProductCategory() As String
    ' Retrieves the current data item.
    Dim productItem = CType(GetDataItem(), Product)

    If productItem IsNot Nothing Then
        Return productItem.ProductCategory.Name
    End If
    Return String.Empty
End Function

Comentarios

La DynamicRouteExpression clase se usa con el control en el QueryExtender marcado de página. La DynamicRouteExpression clase obtiene la clave principal de la información de enrutamiento contenida en una solicitud web. A QueryExtender continuación, el control usa la clave en una Where cláusula . Esto modifica la consulta para el origen de datos, que luego devuelve filas de tabla filtradas por la clave.

También puede filtrar los datos mediante una clave externa que especifique mediante la ColumnName propiedad .

Sintaxis declarativa

<asp:DynamicRouteExpression  
  ColumnName="Name of the foreign key column"/>  

Constructores

DynamicRouteExpression()

Inicializa una nueva instancia de la clase DynamicRouteExpression.

Propiedades

ColumnName

Obtiene o establece el nombre de una columna que contiene una clave externa que se usa para consultar el origen de datos.

Context

Obtiene la instancia de HttpContext del control propietario.

(Heredado de DataSourceExpression)
DataSource

Obtiene el objeto de origen de datos asociado al control propietario.

(Heredado de DataSourceExpression)
IsTrackingViewState

Obtiene un valor que indica si un objeto de expresión de origen de datos realiza un seguimiento de los cambios en su estado de vista.

(Heredado de DataSourceExpression)
Owner

Obtiene el control propietario.

(Heredado de DataSourceExpression)
ViewState

Obtiene una instancia de la clase StateBag que contiene información sobre el estado de vista actual.

(Heredado de DataSourceExpression)

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetQueryable(IQueryable)

Obtiene la consulta del origen de datos.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
LoadViewState(Object)

Carga el estado de los valores del objeto DataSourceExpression que debe almacenarse.

(Heredado de DataSourceExpression)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
SaveViewState()

Guarda el estado de vista actual del objeto DataSourceExpression.

(Heredado de DataSourceExpression)
SetContext(Control, HttpContext, IQueryableDataSource)

Establece el contexto HTTP del objeto DynamicRouteExpression.

SetDirty()

Marca el objeto DataSourceExpression de modo que su estado se guarde en el estado de vista.

(Heredado de DataSourceExpression)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
TrackViewState()

Realiza un seguimiento de los cambios en el estado de vista del objeto DataSourceExpression para que puedan almacenarse en el objeto StateBag del objeto de expresión de origen de datos.

(Heredado de DataSourceExpression)

Implementaciones de interfaz explícitas

IStateManager.IsTrackingViewState

Cuando se implementa mediante una clase, obtiene un valor que indica si un objeto de expresión de origen de datos realiza un seguimiento de los cambios en su estado de vista.

(Heredado de DataSourceExpression)
IStateManager.LoadViewState(Object)

Cuando se implementa mediante una clase, carga el estado de vista anteriormente guardado del objeto de expresión de origen de datos.

(Heredado de DataSourceExpression)
IStateManager.SaveViewState()

Cuando lo implementa una clase, guarda el estado de vista actual del objeto DataSourceExpression.

(Heredado de DataSourceExpression)
IStateManager.TrackViewState()

Cuando se implementa mediante una clase, realiza un seguimiento de los cambios en el estado de vista del objeto DataSourceExpression para que puedan almacenarse en el objeto StateBag del objeto de expresión de origen de datos.

(Heredado de DataSourceExpression)

Se aplica a