Запуск обратной передачи для отправки параметров запроса из раскрывающегося списка DVWP

Мне нужно отфильтровать мой список на основе выбранного значения раскрывающегося списка. Для этого я создал DVWP и преобразовал его в раскрывающийся список. Теперь я следую этому post для запуска событий при выборе раскрывающегося списка, но я просто не знаю, где изменить код. Я фильтрую список по годам. У меня есть список лет, в котором хранятся значения года и соответствующим образом фильтруется при выборе раскрывающегося списка. Я изменил его следующим образом:

<xsl:otherwise>
  <select name="ID" size="1" onchange="document.location.href='pageName.aspx?year=' + this.options[selectedIndex.value])">
    <option selected="true" value="0">Choose One...</option>
    <xsl:call-template name="dvt_1.body">
      <xsl:with-param name="Rows" select="$Rows" />
    </xsl:call-template>
  </select>

Я понятия не имею о xslt, и это не вызывает никаких событий, когда я изменяю значение раскрывающегося списка. Пожалуйста, помогите мне с этим.

Обновление: HTML, который я получаю:

<td valign="top">
  <div WebPartID="9e0da2fd-21ea-417f-863d-6551d16e72a1" HasPers="false" id="WebPartWPQ3" width="100%" class="noindex" allowDelete="false" style="" >
    <select name="ID" size="1" onchange="document.location.href='http://pageName.aspx?year=' + this.options[selectedIndex].value" xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:ddwrt2="urn:frontpage:internal">
      <option selected="" value="0">Choose One...</option>
      <option>2009</option>
      <option>2010</option>
      <option>2011</option>
      <option>2012</option>
      <option>2013</option>
    </select>
  </div>
</td>

person Akhoy    schedule 16.01.2013    source источник


Ответы (1)


Я несколько сомневаюсь, что это проблема XSLT. Сценарий обработчика onchange в этом руководстве сводится к следующему:

document.location.href='pageName.aspx?year=' + this.options[selectedIndex].value

Обратите внимание, что .value находится за пределами []. Не могли бы вы попробовать? Сообщает ли ваш браузер об ошибках JavaScript, когда вы меняете выбор в раскрывающемся списке?

Теперь, согласно этому руководству, вы можете отфильтровать список, указав параметры запроса с именами FilterField1, FilterValue1 и т. д., поэтому вы можете попробовать что-то вроде этого:

document.location.href='pageName.aspx?FilterField1=ColumnName&amp;FilterValue1=' 
 + this.options[selectedIndex].value + '&amp;year=' + this.options[selectedIndex].value

Здесь вы должны заменить «ColumnName» фактическим именем столбца, как указано в этом руководстве. Не могли бы вы попробовать что-то подобное?

person JLRishe    schedule 16.01.2013
comment
Спасибо за ответ! Страница теперь получает сообщение обратно, но группировка не происходит. И достаточно ли указать имя страницы или мне нужно указать имя сервера, как я сделал? Нет, браузер не выдает никаких сообщений об ошибках. - person Akhoy; 16.01.2013
comment
Хорошо, следующее, что нужно проверить, это то, что адресная строка вашего браузера показывает ожидаемый URL-адрес и что у вас есть year=_expected value_ в конце URL-адреса. Вы выполнили инструкции в сообщении блога, чтобы добавить year в качестве параметра строки запроса для DVWP? Изменили ли вы XSL, чтобы использовать этот параметр? - person JLRishe; 16.01.2013
comment
Да, в адресной строке браузера отображается правильный URL-адрес. И я добавил год в качестве параметра, но я не знаю, как использовать этот параметр года. - person Akhoy; 16.01.2013
comment
Хорошо, только что узнал, что мне нужно явно передать параметр вместо того, чтобы вручную вводить год в document.location.href. Выполнение этого с помощью onchange="" не работает, поэтому, думаю, мне придется создать функцию JS. Не могли бы вы сказать мне, где написать функцию javascript на странице xslt. Могу ли я написать его где угодно или внутри заполнителя? - person Akhoy; 16.01.2013
comment
Добавил предложение к моему ответу. - person JLRishe; 16.01.2013
comment
Я не совсем уверен, что вы имеете в виду, когда говорите передать параметр явно. Если вам нужно добавить функции JavaScript, предположительно можно добавить <script> к любой части XSL, которая не будет отображаться несколько раз. Перед тегом <choose> может быть хорошим местом. - person JLRishe; 16.01.2013
comment
Когда я добавляю эту строку в onchange="", она выдает ошибку и не отображает DVWP. Я думаю, что работают только одинарные кавычки. Когда я меняю тебе "" на '', все работает. - person Akhoy; 16.01.2013
comment
Да, моя ошибка. onchange="" начинается и заканчивается двойными кавычками, поэтому он не может содержать двойные кавычки. Так вы говорите, что фильтрация работает с вышеуказанной модификацией? - person JLRishe; 16.01.2013
comment
Хотя этот код работает отлично. Большое спасибо. Не могли бы вы рассказать мне, как использовать параметр строки запроса? Спасибо. - person Akhoy; 16.01.2013
comment
Извиняюсь. Виноват. Я думал, что это сработало, но попытался использовать разные поля в адресной строке браузера. Это не работает. - person Akhoy; 16.01.2013
comment
Насколько я понимаю (я никогда не использовал параметр строки запроса в DVWP), параметр передается в XSLT как параметр, и затем вы можете получить к нему доступ в своем XSLT как $[parameterName], как в <xsl:value-of select="$year" />. По-видимому, также есть способ настроить фильтрацию DVWP и использовать параметр там же: 4aa0-82d4-1f1d16d4cdcc" rel="nofollow noreferrer">тема MSDN. - person JLRishe; 16.01.2013
comment
Значит, для одних полей это работает, а для других нет? Если да, то уверены ли вы, что используете их настоящие имена столбцов, а не их отображаемые имена? - person JLRishe; 16.01.2013
comment
Из того, что я пробовал, этот трюк работает только для списков, а не для представлений. Каждое представление, с которым я пробовал это, не работало. - person Akhoy; 16.01.2013
comment
Под представлениями вы подразумеваете дополнительные представления, связанные со списком SharePoint, или представления данных? - person JLRishe; 16.01.2013
comment
Под представлениями я подразумеваю представления данных. - person Akhoy; 16.01.2013
comment
Ссылка, которую я предоставил 4 комментария, говорит, что в потоке MSDN есть информация о том, как использовать параметр QueryString для фильтрации представления данных. Я считаю, что параметр QueryString также необходимо добавить в это представление данных, а затем появится диалоговое окно, в котором вы можете указать фильтр для этого параметра. Вы пробовали это? - person JLRishe; 16.01.2013
comment
Ага, пробовал. На самом деле, независимо от того, какую фильтрацию я делаю в URL-адресе (даже из адресной строки браузера), он просто не фильтрует представление! - person Akhoy; 16.01.2013
comment
Забыл упомянуть очень важный момент. Я показываю данные списка в DVWP, И при фильтрации также используется ddl DVWP. Итак, это 2 разных DVWP. Будет ли это иметь значение? - person Akhoy; 16.01.2013
comment
Да, так что я говорю, что вы должны добавить параметр QueryString по крайней мере в список DVWP, а также в раскрывающийся список DVWP, если он вам там нужен. Затем вы должны настроить фильтр в списке DVWP для фильтрации на основе этого параметра. Я еще не пробовал это сам, поэтому я, вероятно, не могу предложить гораздо больше, чем это. - person JLRishe; 16.01.2013
comment
Извините, что отвечаю так поздно. Да, я сделал это сейчас. В ddl DVWP добавил Param1 с QueryString:Year и в список DVWP добавил тоже самое и фильтрую на основе year=[Param1]. Примечание: добавлен столбец нового года, чтобы упростить задачу. Теперь URL дает server.aspx?year=2012, но не фильтрует. Как использовать год в строке запроса для фильтрации? - person Akhoy; 17.01.2013
comment
Я думаю, что это обсуждение становится очень затянутым, и я думаю, что было бы целесообразно отделить его от исходной проблемы, которая касалась отправки параметров запроса из раскрывающегося списка. Не могли бы вы открыть отдельный вопрос о проблеме фильтрации? - person JLRishe; 17.01.2013