вторник, 19 июля 2011 г.

Управление ссылками на страницы в XSLT и C#

Если вы вставляли ссылку в визуальном редакторе C1, то обратили внимание, что фактически ссылка создается такая:

~/Renderers/Page.aspx?PageId={GUID}

где {GUID} - это идентификатор страницы. Однако в браузере, такая ссылка корректно заменяется на более привычную, напр.: http://www.contoso.ru/Products.aspx

Ничто вам не мешает обратиться в браузере к странице и по идентификатору:

http://www.contoso.ru/Renderers/Page.aspx?PageId={GUID}

Такая форма ссылки используется в версиях С1 до 2.1.1 (включительно). А вот в версии 2.1.3 (бета) ссылка формируется по-другому - более кратко и удобно:

~/page({GUID})

Напр:

~/page(1544E0B9-48FA-46D9-A368-3513E02A9FEB)

И в версии 2.1.3, в браузере она будет представлена, напр., так: http://www.contoso.ru/Products

Зная эту модель вы можете - при необходимости - создавать ссылки на лету и в XSLT, и в C#.

XSLT:

<xsl:variable name="PageId" select="/in:inputs/in:param[@name='Page']"/>
...
<a href="~/page({$PageId})">ссылка</a>

C#:

HyperLink1.NavigateUrl = string.Format("~/page({0})", SitemapNavigator.CurrentPageId);

К тому же вы можете использовать с такими ссылками и "строки запроса" (query strings), и "сведения о пути" (PathInfo), и их комбинацию, чтобы формировать нужный URL.
  • http://www.contoso.ru/Products?Id=12345678
  • http://www.contoso.ru/Products?Id=12345678&Mode=Full
  • http://www.contoso.ru/Products/12345678
  • http://www.contoso.ru/Products/12345678?Mode=Full
Напр:

<xsl:variable name="PageId" select="/in:inputs/in:param[@name='Page']"/>
<xsl:variable name="ProductId" select="/in:inputs/in:param[@name='Product']"/>
...
<a href="~/page({$PageId}/{$ProductId}?Mode=Full)">Показать полностью</a>

Функции, которые вы можете использовать из XSLT (XSLT функций), чтобы получать значения "строк запроса" и PathInfo, находятся в пространстве имен Composite.Web.Request:
  • Composite.Web.Request.QueryString*
  • Composite.Web.Request.PathInfo*
Чтобы использовать PathInfo, вам нужно предварительно зарегистрировать это использование, добавив вызов функции в ваш XSLT:

<function name="Composite.Web.Request.RegisterPathInfoUsage" xmlns="http://www.composite.net/ns/function/1.0" />

На более ранних версиях C1, будет работать ссылка типа ~/Renderers/Page.aspx?PageId={GUID} и только со "строками запроса".

Комментариев нет:

Отправить комментарий