DynamicRouteExpression Класс

Определение

Получает первичный ключ из сведений маршрутизации, чтобы выполнить фильтрацию данных.

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
Наследование
DynamicRouteExpression

Примеры

Проект Visual Studio с исходным кодом доступен для сопровождения этого раздела: формирование шаблонов динамических данных.

В следующем примере показан пользовательский шаблон страницы List.aspx для таблицы Products. Свойство используется ColumnName для указания внешнего ключа ProductCategory для фильтрации строк Products.

На настраиваемой странице List.aspx отображается столбец, содержащий ссылки категорий, содержащихся в столбце Внешнего ключа ProductCategory. Когда пользователь щелкает одну из этих ссылок, на странице List.aspx отображаются только строки, содержащие выбранную категорию.

Для примера требуется следующее:

<%@ 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

Комментарии

Класс DynamicRouteExpression используется с элементом управления в разметке QueryExtender страницы. Класс DynamicRouteExpression получает первичный ключ из сведений о маршрутизации, содержащихся в веб-запросе. Затем QueryExtender элемент управления использует ключ в предложении Where . Это изменяет запрос к источнику данных, который затем возвращает строки таблицы, отфильтрованные по ключу.

Вы также можете фильтровать данные с помощью внешнего ключа, указанного ColumnName с помощью свойства.

Декларативный синтаксис

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

Конструкторы

DynamicRouteExpression()

Инициализирует новый экземпляр класса DynamicRouteExpression.

Свойства

ColumnName

Получает или задает имя столбца, который содержит внешний ключ, используемый для запросов к источнику данных.

Context

Получает экземпляр HttpContext элемента-владельца.

(Унаследовано от DataSourceExpression)
DataSource

Получает объект источника данных, связанный с элементом-владельцем.

(Унаследовано от DataSourceExpression)
IsTrackingViewState

Получает значение, указывающее, отслеживает ли объект выражения источника данных изменения в своем состоянии представления.

(Унаследовано от DataSourceExpression)
Owner

Получает элемент-владелец.

(Унаследовано от DataSourceExpression)
ViewState

Получает экземпляр класса StateBag, содержащий сведения о текущем состоянии представления.

(Унаследовано от DataSourceExpression)

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetQueryable(IQueryable)

Получает запрос от источника данных.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
LoadViewState(Object)

Загружает в объект DataSourceExpression состояние значений, которое необходимо сохранить.

(Унаследовано от DataSourceExpression)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
SaveViewState()

Сохраняет текущее состояние просмотра объекта DataSourceExpression.

(Унаследовано от DataSourceExpression)
SetContext(Control, HttpContext, IQueryableDataSource)

Задает HTTP-контекст объекта DynamicRouteExpression.

SetDirty()

Помечает объект DataSourceExpression для сохранения его состояния в состоянии просмотра.

(Унаследовано от DataSourceExpression)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
TrackViewState()

Отслеживает изменения состояния представления объекта DataSourceExpression, позволяя сохранять их в объекте StateBag для объекта выражения источника данных.

(Унаследовано от DataSourceExpression)

Явные реализации интерфейса

IStateManager.IsTrackingViewState

Будучи реализован классом, получает значение, указывающее, отслеживает ли объект выражения источника данных изменения в своем состоянии представления.

(Унаследовано от DataSourceExpression)
IStateManager.LoadViewState(Object)

Будучи реализован классом, загружает ранее сохраненное состояние представления объекта выражения источника данных.

(Унаследовано от DataSourceExpression)
IStateManager.SaveViewState()

Будучи реализован классом, сохраняет текущее состояние просмотра объекта DataSourceExpression.

(Унаследовано от DataSourceExpression)
IStateManager.TrackViewState()

Будучи реализован классом, отслеживает изменения состояния представления объекта DataSourceExpression, позволяя сохранять их в объекте StateBag для объекта выражения источника данных.

(Унаследовано от DataSourceExpression)

Применяется к