Динамически установить DefaultValue для ParameterBinding в DataFormWebPart - PullRequest
6 голосов
/ 04 марта 2009

На моей пользовательской странице aspx в WSS я использую DataFormWebPart с файлом xsl для визуализации некоторых данных. Чтобы передать значения в xsl, я использую привязки параметров. В частности, мне нужно передать URL хоста сервера следующим образом:

<ParameterBinding 
    Name="HttpHost" 
    Location="CAMLVariable" 
    DefaultValue="http://hardcoded.com" />

Это прекрасно работает, но следующее, что я хочу сделать, - это динамическое получение имени хоста. Чтобы понять, как получить это из SharePoint, я добавил следующую привязку:

<ParameterBinding 
    Name="HttpHost" 
    Location="CAMLVariable" 
    DefaultValue='<%# SPContext.Current.Site.Url.Replace
       (SPContext.Current.Site.ServerRelativeUrl, "") %>' />

Теперь к проблеме. Код работает как положено, если используется в другом месте на странице, но с приведенным выше кодом отчетов SharePoint:

Ошибка веб-части: свойство 'ParameterBindings' для WebPartPages: DataFormWebPart ' не разрешает дочерние объекты.

Кто-нибудь может принять это?

Обновление: я включил серверный код в соответствии с этой статьей

Ответы [ 2 ]

5 голосов
/ 05 марта 2009

Хорошо, я нашел решение, которое не так элегантно, но оно работает.

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

Атрибут ParameterBinding Location указывает, откуда получить значение. Такие статьи, как это подсказки опции "Control ()". Таким образом, изменив привязку параметра к:

<ParameterBinding
  Name="HttpHost"
  Location="Control(MyHttpHost, Text)"
  DefaultValue="" />

и добавление следующего кода на мою страницу:

<asp:TextBox ID="MyHttpHost" runat="server" Visible="false" />
<script runat="server">
protected void Page_Load()
{
  MyHttpHost.Text = 
   SPContext.Current.Site.Url.Replace(SPContext.Current.Site.ServerRelativeUrl, ""); 
}
</script>

... на самом деле сделал трюк!

Чтобы получить значения параметров из прилагаемого XSL-файла, я поместил элементы param в корневой элемент. Атрибут имени параметра должен соответствовать атрибуту ParameterBinding:

<xsl:stylesheet ...>
    ...
    <xsl:param name="HttpHost"/>

На этот параметр можно ссылаться как на любую другую переменную XSL.

2 голосов
/ 07 февраля 2010

Использование серверных переменных, вероятно, имеет больше смысла: http://mdasblog.wordpress.com/2007/10/19/data-view-web-part-parameters-based-on-server-variables/

...