UpdatePanel, обратная передача JavaScript и одновременное изменение строки запроса на странице поиска SharePoint - PullRequest
1 голос
/ 24 марта 2010

Вырвал мой слух этим. Дай мне посмотреть, смогу ли я объяснить:

У меня есть страница результатов SharePoint, на которой у меня есть Core WebPart результатов поиска. Теперь я хочу изменить параметр в строке запроса, когда я отправляю страницу назад, чтобы WebPart возвращал разные результаты для каждого параметра, например, строка запроса будет интерактивной map.aspx? k = Страна: Румыния, это отфильтрует результаты для Румынии.

Первый вопрос: я хочу сделать это с помощью JavaScript, поэтому я звоню:

document.getElementById('aspnetForm').action = "interactivemap.aspx?k=Country:" + country;

Здесь нет ничего особенного, но причина, по которой мне нужно звонить из Javascript, заключается в том, что на этой странице также есть флэш-апплет, из которого происходят вызовы Javascript. Когда выполняются вызовы javascript, странице необходимо выполнить PostBack, но не перезагружать флэш-апплет.

Для этого я обратился к ASP.Net AJAX, чтобы обернуть веб-часть результатов поиска в панель обновлений. Теперь, если я использую кнопку в UpdatePanel для обратной передачи, UpdatePanel ведет себя как положено и выполняет частичную визуализацию веб-части результатов поиска, не перезагружая флэш-апплет.

Проблема возникает потому, что мне нужно отправить обратно страницу из JavaScript. Я вызвал __doPostBack (), поскольку я успешно использовал это в прошлом. Он работает сам по себе, но не работает, когда я впервые вызываю вышеупомянутый Javascript перед __doPostBack () (я также пытался вызвать click () для скрытой кнопки), код для страницы находится внизу.

Я думаю, что проблема заключается в том, что скрипт-менеджер не допускает частичного рендеринга при изменении действия после публикации формы.

Мои вопросы.

A) Есть ли другой способ изменить параметр веб-части результатов поиска без использования строки запроса.

или

B) Есть ли способ изменить строку запроса при выполнении обратной передачи AJAX и получении частичного рендеринга.

    <asp:content contentplaceholderid="PlaceHolderFullContent" runat="server">
          <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
          <SPSWC:pagelevelerror runat="server" id="PageLevelError"/>
          <script type="text/javascript">
              function update(country) {
                  //__doPostBack('ContentUpdatePanel', '');
                  //document.getElementById('aspnetForm').action = "interactivemap.aspx?k=ArticleCountry:" + country;
                  document.getElementById('ctl00_PlaceHolderFullContent_UpdateButton').click();
              }
          </script>
            <div id="flashFeature">  
             <object type="application/x-shockwave-flash" data="_layouts/HFT/flashApplets/interactiveMap/interactiveMap/interactiveMapAssets/IMap.swf" width="100%" height="500px" id="flashContent" style="visibility: visible;">
                    <param name="bgcolor" value="#cccccc"><param name="allowfullscreen" value="true">
                    <param name="allowscriptaccess" value="always">
                    <param name="flashvars" value="ASSETS_FOLDER=_layouts/HFT/flashApplets/interactiveMap/interactiveMap/interactiveMapAssets/">
                    <param name="movie" value="_layouts/HFT/flashApplets/interactiveMap/interactiveMap/interactiveMapAssets/IMap.swf">
                    <embed src="_layouts/HFT/flashApplets/interactiveMap/interactiveMap/interactiveMapAssets/IMap.swf" width="100%" height="500px"></embed></object> 
            </div>
           <div onclick="update('Romania');">Romania</div>
           <div class="firstDataTitle">
          <div class="datatabletitleOuterWrapper">
              <div class="datatabletitle">
                  <span>Content</span></div>
          </div>
             <div class="datatableWrapper">
                 <div class="dataHolderWrapper">
                     <div class="datatable">
                         <div>
                            <div class="searchMain">          
                                <div class="searchZoneMain">
                                 <asp:UpdatePanel runat="server" id="ContentUpdatePanel"  UpdateMode="Conditional">                              
                                 <ContentTemplate>
                                     <WebPartPages:webpartzone runat="server" AllowPersonalization="false" title="    <%$Resources:sps,LayoutPageZone_BottomZone%>" id="BottomZone" orientation="Vertical" QuickAdd-GroupNames="Search" QuickAdd-ShowListsAndLibraries="false"><ZoneTemplate>   </ZoneTemplate></WebPartPages:webpartzone>
                                     <asp:Button id="UpdateButton" name="UpdateButton" runat="server" Text="Update"/>
                                  </ContentTemplate>
                                </asp:UpdatePanel>
                                </div>
                            </div>    
                        </div>                        
                 </div>                           
             </div>
         </div>
         </div>  
    </asp:content>

Ответы [ 3 ]

1 голос
/ 24 марта 2010

Веб-часть результатов поиска также принимает запросы в опубликованной форме - поле расширенного поиска не устанавливает строку запроса.

Вы можете найти соответствующие имена полей в моем блоге - http://tqcblog.com/2007/10/26/creating-a-custom-advanced-search-box-in-moss-2007/

Используя этот подход, вы сможете вернуться к исходному тесту использования кнопки на панели обновлений.Возможно, вы даже сможете использовать стандартное поле расширенного поиска (с большинством отключенных полей) на панели обновлений.

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

1 голос
/ 24 марта 2010

Я бы предложил избавиться от UpdatePanel. Гораздо лучшим способом было бы использовать «правильный» ajax, например. с помощью jQuery и обновите данные своей веб-части на основе полученных данных.

Как вы заметили, UpdatedPanel - это обычно быстрая реализация, которая имеет свои ограничения. Однако я не могу придумать вескую причину, чтобы оправдать накладные расходы, которые они сопровождают.

Michael

0 голосов
/ 24 марта 2010

Это похоже на ответ для меня, но в вашей статье не указаны опубликованные поля, а только те поля, которые отображает веб-часть расширенного поиска. Я не использую поля ввода для указания запроса, просто вызов javascript.

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

Я использую:

WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$PlaceHolderFullContent$UpdateButton", "", false, "", "interactivemap.aspx?k=ArticleCountry:" + country, false, true));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...