Динамически установить DefaultValue для ParameterBinding в DataFormWebPart

StackOverflow https://stackoverflow.com/questions/609943

Вопрос

На моей пользовательской странице 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'   не разрешает дочерние объекты.

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

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

Это было полезно?

Решение

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

После того, как я безуспешно попробовал различные методы манипулирования свойством 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.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top