Динамически установить DefaultValue для ParameterBinding в DataFormWebPart
-
03-07-2019 - |
Вопрос
На моей пользовательской странице 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/ р>