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
- Наследование
Примеры
Проект Visual Studio с исходным кодом доступен для сопровождения этого раздела: формирование шаблонов динамических данных.
В следующем примере показан пользовательский шаблон страницы List.aspx для таблицы Products. Свойство используется ColumnName для указания внешнего ключа ProductCategory для фильтрации строк Products.
На настраиваемой странице List.aspx отображается столбец, содержащий ссылки категорий, содержащихся в столбце Внешнего ключа ProductCategory. Когда пользователь щелкает одну из этих ссылок, на странице List.aspx отображаются только строки, содержащие выбранную категорию.
Для примера требуется следующее:
Веб-сайт динамических данных. Дополнительные сведения см. в пошаговом руководстве по созданию нового веб-сайта динамических данных с помощью формирования шаблонов.
Образец базы данных AdventureWorksLT. Дополнительные сведения см. в разделе "Практическое руководство. Подключение в базу данных AdventureWorksLT с помощью . MDF-файл.
<%@ 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) |